2016-09-16 96 views
0

我是新來kotlin(今基本上開始)懸而未決參考類,方法

我想寫一個dsl像建設者我GRLMessage類。

data class GRLMessage(var method: GRLMethod, var headers: Map<String, String>, var multipart: Object) { 

    fun message(init: GRLMessage.() -> Unit) : GRLMessage { 
     init() 
     return this 
    } 

    fun method(init: GRLMessage.() -> GRLMethod) : GRLMessage { 
     method = init() 
     return this 
    } 

    fun headers(init: GRLMessage.() -> Unit) : GRLMessage { 
     init() 
     return this 
    } 

    fun header(init: GRLMessage.() -> Pair<String, String>) : GRLMessage { 
     headers.plus(init()) 
     return this 
    } 

    fun multipart(init: GRLMessage.() -> Object) : GRLMessage { 
     multipart = this.init() 
     return this 
    } 
} 

爲了檢查它,我添加了測試。

import org.junit.Assert.* 
import org.junit.* 

class GRLMessageTest { 

    data class DummyMultipart(val field: String) {} 

    @Test fun grlMessageBuilderTest() { 
     val grlMessage = GrlMessage().message { 
      method { GRLMethod.POST } 
      headers { 
       header { Pair("contentType", "object") } 
       header { Pair("objectType", "DummyMultipart") } 
      } 
      multipart { DummyMultipart("dummy") } 
     } 

     val multipart = DummyMultipart("dummy") 
     val headers = mapOf(
       Pair("contentType", "object"), 
       Pair("objectType", "DummyMultipart") 
     ) 
     val method = GRLMethod.POST 

     assertEquals(multipart, grlMessage.multipart) 
     assertEquals(headers, grlMessage.headers) 
     assertEquals(method, grlMessage.method) 
    } 
} 

這兩個類是在同一包(較 - 一個在src/main/kotlin,另一個是在src/test/kotlin)。

當我嘗試使用gradle build失敗上compileTestKotlin任務有錯誤

GRLMessageTest.kt: (13, 26): Unresolved reference: GrlMessage 
GRLMessageTest.kt: (14, 13): Unresolved reference: method 
GRLMessageTest.kt: (15, 13): Unresolved reference: headers 
GRLMessageTest.kt: (17, 17): Unresolved reference: header 
GRLMessageTest.kt: (19, 13): Unresolved reference: multipart 

什麼問題來構建應用程序?

這裏是佈局

enter image description here

這裏是build.gradle針對具體子項目和插件

enter image description here enter image description here

+0

你能證明你的'build.gradle'也是,如果你是在一個包或不適合每個文件(什麼是'每個文件的package'聲明) –

+0

亦是科特林的版本? –

+1

在Kotlin中編寫DSL不是最簡單的第一天任務,我建議您對該語言有完整的理解,並且先研究了其他基於Kotlin的DSL實現,但有許多技巧要知道,並且您的方法會遇到問題由於戰鬥的數據類和默認的構造函數等等。在你掌握了豐富的語言之後,我會更簡單地回到DSL。 –

回答

3

你有你的等級和基準之間的命名不匹配來自你的測試的課程。

您的課程名爲GRLMessage,但在測試中您將其引用爲GrlMessage,而Kotlin區分大小寫。因此這些不被視爲相同。你需要在兩者中使用完全相同的標識符。

+0

哦,我明白了!謝謝。現在我得到了其他錯誤(關於類型不匹配和沒有值傳遞),但無論如何。我想我知道如何解決它。 – lapots

+0

新的問題應該是新的SO問題,當然你需要解決它們。享受Kotlin! –

+0

嗯,我知道。 – lapots