Tag: kotlin extension

转换我现有的andorid工作室项目到kotlin?

错误:无法找到com.android.tools.build:gradle:3.0.0-alpha2。 在以下位置搜索: 文件:/User/3.0/android-studio/gradle/m2repository/com/android/tools/build/gradle/3.0.0-alpha2/gradle-3.0.0-alpha2.pom 文件:/User/3.0/android-studio/gradle/m2repository/com/android/tools/build/gradle/3.0.0-alpha2/gradle-3.0.0-alpha2.jar https://jcenter.bintray.com/com/ … https://jcenter.bintray.com/com/ … 需求:项目 它与Android工作室2.3工作正常。 我已经尝试清理项目,从项目中删除生成文件夹,无效并重新启动。 请建议我能做些什么?

Kotlin扩展通用函数与基本类型没有反射API

我有一个Java对象具有方法getLong , getBoolean和getString 。 我试图做一个通用的扩展函数,它具有作为最后一个参数的功能。 本质上包装的尝试和捕获和调用getString等可能会引发异常。 当我调用getIt<Long>() { // do something with it }我发现<reified T>需要反射api来找出T 我不能做的是检查也不isInstance。 有任何想法吗? // This is the non generic function version to get an idea inline fun JSONObject.getItLong(key: String, block: (value: Long) -> Unit) { try { block(this.getLong(key)) } catch (e: JSONException) { Log.w("${ javaClass.simpleName }KEx", e.message) } } 下面的when不起作用。 inline […]

findViewById ClassCastExcpetion

我使用kotlin-extension插件来查找视图。 但现在我得到一个例外 setSupportActionBar(mainActivity_toolbar) 它一直工作到现在,但现在它给了一个 ClassCastException: android.widget.FrameLayout cannot be cast to android.support.v7.widget.Toolbar 我做的最后一件事就是给我的fab添加一个id并设置一个OnClickListener 。 但在我的layout.xml中: android.support.v7.widget.Toolbar的ID为"@+id/mainActivity_toolbar" , FrameLayout的ID为"@+id/mainActivity_framelayout" 。 我首先以为在kotlin-extension插件中有一个bug,但是使用findViewById也是行不通的。 谢谢

如何在Kotlin中创建一个静态类?

我有2个班级: object TrimNCompressConstants { var REQUEST_CODE = 101 var EXTRA_VIDEO_PATH = "EXTRA_VIDEO_PATH" var EXTRA_MESSAGE = "EXTRA_MESSAGE" var RESULT_SUCCESS = 102 } 和 class VideoUtil (var context : Context?) { fun show (code : Int) { TrimNCompressConstants.REQUEST_CODE = code } } 在调用show() ,它会给TrimNCompressConstants.REQUEST_CODE = code提供一个错误: java.lang.ExceptionInInitializerError 有人可以帮忙吗? 谢谢。

Kotlin:当扩展函数隐藏类的默认实现?

我试图找出当重写一个现有的类功能,具有相同签名的扩展功能 – 将生效? 这是我的示例代码: fun String.toUpperCase(): String = "ext. function impl." fun main(args: Array<String>) { println("Hello".toUpperCase()) // ext. function impl. println(MyClass().toUpperCase()) // class impl. } class MyClass { fun toUpperCase() : String { return "class impl." } } fun MyClass.toUpperCase() : String { return "ext. function impl." } 所以: 什么是规则? 什么时候会被叫? 我怎样才能覆盖这个决定? 可能吗?

如何在父上下文中创建变量

我试图在Kotlin中实现类似于这个语法的东西 class MyClass() { fun before(init: () -> Unit): Unit { with(this) init } fun after(block: () -> Unit): Unit { with(this) block } } fun main () { var myClass = MyClass() myClass.before { var a = 5 } myClass.after { println("Double of a is ${a * 2}") } } 现在这个不行,因为after不能解决。 我知道这是由于关闭的方式。 我的问题是,如果Kotlin中有一些机制允许我这样做,可以在闭包/扩展中创建变量,以便将它们存储在接收方对象中,并可供其他闭包/扩展访问。 这是将Groovy脚本迁移到Kotlin的一部分。 […]

如何引用Kotlin中的匿名内部类?

我有以下扩展方法。 如何引用传递给addOnGLobalLayoutListener()方法的addOnGLobalLayoutListener() ? 我需要将侦听器传递给removeOnGlobalLayoutListener()方法。 fun View.OnGlobalLayout(callback:() -> Unit ): Unit{ this.viewTreeObserver.addOnGlobalLayoutListener { if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { this.viewTreeObserver.removeOnGlobalLayoutListener(this); } else { this.viewTreeObserver.removeGlobalOnLayoutListener(this); } callback(); } }

如何在同一个src文件夹中运行不同的.kt文件/类?

我是kotlin的新手,我开始通过安装intellij IDEA来学习Kotlin语言,现在问题是当我想通过运行按钮运行第二个.kt文件时,它只显示我运行第一个.kt文件的内容。 总是显示运行HelloWorld.kt ,我想运行Addition.kt 我不能在kotlin上运行新的crated类,它只显示我在项目中第一次运行的第一个类。

Kotlin可变属性的扩展函数

我试图设置一个可变属性的扩展函数,所以我可以在扩展函数中重新分配属性。 我想知道这是否可能。 我的目标是使Date扩展易于访问。 例如: fun Date.addDays(nrOfDays: Int): Date { val cal = Calendar.getInstance() cal.time = this cal.add(Calendar.DAY_OF_YEAR, nrOfDays) return cal.time } 此函数使用Calendar对象将日期数添加到日期。 问题是每次我必须返回一个新的日期,每次使用这个函数都可能会造成混乱。 我试过了: fun KMutableProperty0<Date>.addDays(nrOfDays: Int) { val cal = Calendar.getInstance() cal.time = this.get() cal.add(Calendar.DAY_OF_YEAR, nrOfDays) this.set(cal.time) } 不幸的是,这不能用于Date对象。 可以这样做吗?

Kotlin中泛型类的扩展函数

下面我的扩展功能有什么问题 class Foo<T> { fun <T> Foo<T>.plus(that: Foo<T>): Foo<T> = throw Exception() init { Foo<Int>() + Foo<String>() // A receiver of type Foo<T> is required } } 更新 我想知道为什么它不同于普通的扩展函数,T成功地推断为Any并希望实现相同的行为,例如T被推断为Foo <Any> class Foo { fun <T> T.foo(that: T): T = throw Exception() init { "str" foo 42 } }