Tag: kotlin extension

注释类型的扩展功能

是否有可能像这样在注释类型上定义Kotlin扩展函数? @ColorInt fun @ColorInt Int.darken(): Int { return ColorUtils.blendARGB(this, Color.BLACK, 0.2f) } 替代形式: @ColorInt fun (@ColorInt Int).darken(): Int { return ColorUtils.blendARGB(this, Color.BLACK, 0.2f) } 这将对应于以下静态功能: @ColorInt fun darken(@ColorInt color: Int): Int { return ColorUtils.blendARGB(color, Color.BLACK, 0.2f) } 我不认为使用Kotlin是可能的,但是在Kotlin的后续版本中可以添加这个功能吗? 注意:同样的问题也适用于@[resource type]Res @StringDef , @[resource type]Res @StringDef , @[resource type]Res 。

Kotlin-扩展功能和平台类型?

我想将两个扩展函数添加到ResultSet ,获得一个LocalDate值。 fun ResultSet.getLocalDate(colName: String) = getDate(colName)?.toLocalDate() fun ResultSet.getLocalDate(colIndex: Int) = getDate(colIndex)?.toLocalDate() 问题是getDate()返回一个Date! ,显然我可以得到一个空错误没有?. 在toLocalDate()之前调用。 但是,那么使用这个扩展的任何人都必须使用结果作为LocalDate? 而不是LocalDate! 。 为了一致性,有没有办法维护平台类型? 让扩展函数的用户决定是否允许为空? 或者,我认为这是一个不便,而不是一个功能?

kotlin扩展方法访问另一个kt

我正在考虑在一个文件中添加一个全局扩展方法到字符串,无论我在哪里使用一个字符串,我总是可以使用这个扩展。 但我没有找到办法做到这一点…我只是现在到处粘贴扩展。 在A.kt中的扩展: class A{ …… fun String.add1(): String { return this + "1" } …… } 并在B.kt中访问像这样: class B{ fun main(){ …… var a = "" a.add1() …… } } 我试过每一个我可以添加像static和final但没有任何工作。

Kotlin泛型期待意想不到的类型

我用两个泛型定义了下面的基类,并使用它深两层(缺少一个更好的短语)。 这是我的用例。 abstract class BasePresenter<out M, out V> { var model: M? = null var view: WeakReference<V>? = null fun setM(model: M?): Unit { this.model = model if (setupDone()) { updateView() } } fun bindView(view: V) { this.view = WeakReference(view) } fun unbindView() { this.view = null } abstract fun updateView() fun view(): V? { […]

Kotlin – 延期上课

是否有可能创建类似String的final类的扩展? 像在swift中一样,可以在final class的extension中添加其他方法。 举个例子 – 我想创建一个String扩展的方法,它会告诉我String有有效的密码长度。 val password : String = mEdtPassword!!.getText().toString() // how to define haveValidLength method in extension val isValid : Boolean = password.haveValidLength() 注 – 这个例子只是为了理解extension可用性,而不是真实的场景。

我可以创建一个将rxJava订阅添加到CompositeSubscription的Kotlin扩展方法吗?

我一直在玩Kotlin / RxJava,并试图创建一个扩展方法来将订阅添加到CompositeSubscription,这将工作如下: search.subscribe { //do stuff }.addToComposite(compositeSubscription) 这是我迄今的尝试: fun Subscription.addToComposite(composite: CompositeSubscription) = { composite.add(this) } 它编译和运行没有错误,但似乎并没有实际将订阅添加到CompositeSubscription。 我做错了什么?

Kotlin成员和扩展在同一时间

为了了解更多关于Kotlin的信息,我正在开发一个示例Android应用程序,我可以尝试不同的东西。 然而,即使经过了一段时间的研究,我还是无法为以下问题找到合适的答案: 我们在View类上声明一个(虚拟)扩展函数: fun View.isViewVisibility(v: Int): Boolean = visibility == v 现在我怎么能从其他地方引用这个函数,以后再调用invoke()呢? val f: (Int) -> Boolean = View::isViewVisibility 目前给我: 错误:(57,35)类型不匹配:推断的类型是KFunction2,但(Int) – >布尔预期错误:(57,41)'isViewVisibility'同时是一个成员和一个扩展。 对这些元素的引用是不允许的 有没有解决办法? 谢谢 !

如何在Kotlin中创建一个打开新的活动(Android Studio)的按钮?

您好我正在使用Android Studio和Kotlin语言制作应用程序,并且无法让我的按钮打开新的活动。 我有我的xml文件中创建的按钮,但我找不到如何在MainActivity.kt中声明它的KOTLIN语法,以及如何创建将带我到新的活动的OnClicklistener。 我有清单中定义的新活动,我想我只需要从如何实际从MainActivity.kt切换到secondActivity.kt的语法帮助。 任何帮助表示赞赏。

Kotlin || 无法将库添加到我的应用程序?

我正在尝试将库添加到Kotlin但它没有得到正确的安装。 以下错误我正在导入库,请检查它 错误:找不到com.android.tools.build:gradle:2.3.1。 在以下位置搜索:file:/ C:/ Program Files / Android / Android Studio Preview / gradle / m2repository / com / android / tools / build / gradle / 2.3.1 / gradle-2.3.1.pom文件:/ C :/ Program Files / Android / Android Studio Preview / gradle / m2repository / com / android / tools / build / gradle […]

是否应该避免在Kotlin中命名与现有类相同的功能? 为什么?

Kotlin允许命名与现有类相同的函数,例如,具有初始化函数的HashSet可以像这样实现: fun <T> HashSet(n : Int, fn: (Int) -> T) = HashSet<T>(n).apply { repeat(n) { add(fn(it)) } } 使用时,它看起来像一个正常的HashSet构造函数: var real = HashSet<String>() var fake = HashSet(5) { "Element $it" } 这应该避免或鼓励,为什么?