有没有可能在Kotlin中创建对伴侣对象generics方法的引用?

是否有可能将一个variables的值设置为一个方法,其中该方法是一个Companion对象,并有一个types参数? 像下面这样: class A { companion object B { fun foo(n: T) { } } } val b = AB::foo

内置“with”types方法,返回被调用的对象

在Kotlin中,有一个apply方法 : inline fun T.apply(block: T.() -> Unit): T (source) 使用this值作为接收方调用指定的function块并返回this值。 这使您可以像下面这样配置一个对象: val myObject = MyObject().apply { someProperty = “this value” myMethod() } 在apply {}调用之后, myObject将是MyObject 。 Groovy有with类似的方法 : public static T with(U self, @DelegatesTo(value=DelegatesTo.Target.class,target=”self”,strategy=1) Closure closure ) 允许为对象引用self调用闭包。 … 还有一个来自doc的例子: def b = new StringBuilder().with { append(‘foo’) append(‘bar’) return it } assert b.toString() == […]

在TeamCity Kotlin DSL中使用相同的步骤预先安装多个BuildType

比方说,我有一个项目中的多个生成types: object Project : Project ({ // …. buildType(foo) buildType(bar) buildType(baz) }) object foo() : BuildType ({ // …. steps { script { scriptContent = “echo foo” } } }) foo,bar和baz buildType在内部太不一样了,不能转换成单个类。 现在我有一个要求,不需要修改foo,bar或者baz的源代码就可以在前面添加两个步骤: script { scriptContent = “echo step 1” } script { scriptContent = “echo step 2” } 所以,当我开始建立foo时,它会输出: step 1 step 2 foo

Kotlin警告:条件分支结果的types是隐含的任何吗?

我有“types的条件分支结果是Any的暗示性演员? 警告当我尝试做这样的事情: objects?.forEach { val gson = Gson() val chatObject = if(it.type == CHAT_TEXT_TYPE) gson.fromJson(it.value, ChatText::class.java) //WARNING else gson.fromJson(it.value, ChatProduct::class.java) //WARNING //TEST if(chatObject is ChatText) Log.e(“ChatText: It works!”, chatObject.text) if(chatObject is ChatProduct) Log.e(“ChatProduct: It works!”, chatObject.name) } 但最后它的工作。 我的代码有什么问题吗? 有没有可能删除这个警告? 编辑(作为@ Xavier布克莱特建议 – 警告消失) val chatObject = when (it.type) { CHAT_TEXT_TYPE -> gson.fromJson(it.value, ChatText::class.java) CHAT_PRODUCT_TYPE […]

Kotlin编译器不能确定该variables在do-while循环中是不可空的

我有以下方法。 它的逻辑非常简单,如果设置了权限,那么在有值的时候调用左边(非空值)。 当我以下面的方式写它,它的工作。 fun goNext(from: Node): Node? { var prev : Node = from var next : Node? = from.right if (next != null) { prev = next next = next.left while (next != null) { prev = next next = next.left } } return prev } 相反,如果我尝试使用do-while循环缩短代码,那么它不再是在Node next智能代码。 它显示这个错误: Type mismatch. Required: Node Found: […]

如何使“this”成为Listener的参考,而不是Kotlin中的Activity?

我有一个类似于以下示例的情况,当我调用它时引用了Activity而不是OnClickListener 。 有没有办法让这个听众的参考? private fun onClick() = View.OnClickListener { // How to make ‘this’ a reference of OnClickListener instead of the Activity }

如何在Kotlin中使用Gson的TypeToken +generics

我无法从自定义类(Turns)中获取genericstypes的列表: val turnsType = TypeToken<List>() {}.type val turns = Gson().fromJson(pref.turns, turnsType) 它说: cannot access ” it is ‘public /*package*/’ in ‘TypeToken’

如何处理从Java迁移到Kotlin的generics边界?

我的目标是让接口方法接受实现的类types。 这是我迄今写的代码: internal interface Diff { //in Java I was using fun lessThan(other: Diff): Boolean } private class ADiff(private val value: Int) : Diff { override fun lessThan(other: ADiff): Boolean { return value < other.value } } //B can now accept even int types which is not desired private class BDiff(private val value: Int) : […]

为什么需要类Preference 被对象包装?

以下代码A来自https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/extensions/DelegatesExtensions.kt 我可以使用private var zipCode: Long by DelegatesExt.preference(this, ZIP_CODE, DEFAULT_ZIP)在我使用代码A时调用。 我不明白为什么作者用对象DelegatesExt包装类偏好(…) 我认为代码B更简单,我可以使用private val zipCode: Long by Preference(this, ZIP_CODE, DEFAULT_ZIP)来调用我使用代码B 为什么需要类包含对象的首选项? 代码A object DelegatesExt { fun notNullSingleValue() = NotNullSingleValueVar() fun preference(context: Context, name: String, default: T) = Preference(context, name, default) } class NotNullSingleValueVar { private var value: T? = null operator fun getValue(thisRef: Any?, property: KProperty): T […]

未解决的参考:junit

我正在使用Kotlin和LibGDX框架编写游戏。 我新来测试。 我已经通过一些基本的教程如何创建简单的测试。 以及如何配置gradle。 我只是点了课,选择创建测试。 但是,当我尝试建立项目,我得到一个错误: e: /Users/maximternovtsi/bagel/core/src/test/test/BagelTest.kt: (1, 12): Unresolved reference: junit e: /Users/maximternovtsi/bagel/core/src/test/test/BagelTest.kt: (2, 12): Unresolved reference: junit e: /Users/maximternovtsi/bagel/core/src/test/test/BagelTest.kt: (6, 6): Unresolved reference: Test e: /Users/maximternovtsi/bagel/core/src/test/test/BagelTest.kt: (8, 9): Unresolved reference: Assertions e: /Users/maximternovtsi/bagel/core/src/test/test/BagelTest.kt: (11, 6): Unresolved reference: Test e: /Users/maximternovtsi/bagel/core/src/test/test/BagelTest.kt: (13, 9): Unresolved reference: Assertions FAILURE: Build failed with an exception. * […]