我是新來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
什麼問題來構建應用程序?
這裏是佈局
這裏是build.gradle
針對具體子項目和插件
你能證明你的'build.gradle'也是,如果你是在一個包或不適合每個文件(什麼是'每個文件的package'聲明) –
亦是科特林的版本? –
在Kotlin中編寫DSL不是最簡單的第一天任務,我建議您對該語言有完整的理解,並且先研究了其他基於Kotlin的DSL實現,但有許多技巧要知道,並且您的方法會遇到問題由於戰鬥的數據類和默認的構造函數等等。在你掌握了豐富的語言之後,我會更簡單地回到DSL。 –