Tag: kotlin extension

在android java类中使用Kotlin扩展

是否有可能在android java类中使用kotlin扩展? 例: fun String.getSomething(): String { return “something” } 那么在Java中使用它就像: String someString = “blabla”; someString.getSomething(); 这可能吗?

在V1.0.1中不能识别Kotlin扩展属性

重新访问Kotlin 1.0.1以前版本的一些代码,看起来我的扩展属性不再有效。 事实上,它仍然存在,但我不能再覆盖它。 考虑这个类: class TestClass { override val loggerName: String get() = “A new name” fun aMethod() { info(“test info message”) } } Pre Kotlin 1.0.1这将工作,如果你有以下扩展: val Any.loggerName: String get() = javaClass.simpleName!! fun Any.info(message: String) { //… } loggerName将默认采用有问题的实例的类名称。 目前,在这种情况下,loggerName被正确地分配给TestClass ,但是我不能覆盖它。 这是Kotlin新版本中的一个意外错误还是一个新的限制? 我已经搜索Kotlin – 扩展,但只发现它应该工作。 技术 : 我正在使用Kotlin插件版本1.0.1-release-IJ143-32在IntelliJ IDEA 2016.1中进行测试。 编辑1: TestClass甚至不能识别这个属性,但是当访问TestClass的一个实例(例如: instanceOfTestClass.loggerName )时,它被识别。

Android kotlin扩展错误

java.lang.VerifyError:… / utils / KotlinViewExtKt $ animateFadeOut $ 1 在仿真器上运行应用程序时出现错误PRE Lolipop(<21 api) 引起麻烦的function: fun View.animateFadeOut(animDuration: Long = 250) { this.animate() .alpha(0F) .setDuration(animDuration) .setListener(object : Animator.AnimatorListener { override fun onAnimationRepeat(p0: Animator?) {} override fun onAnimationEnd(animation: Animator?, isReverse: Boolean) { super.onAnimationEnd(animation, isReverse) show(false) } override fun onAnimationEnd(p0: Animator?) { show(false) } override fun onAnimationCancel(p0: Animator?) { } […]

设置kotlin扩展名

我不确定是否有可能将kotlin扩展设置为java对象。 在我的程序中,我有一个名为Submission的java类,我想创建一个名为categories的kotlin扩展 – 一个ArrayList – 所以我这样做了。 var Submission.categories: ArrayList get() { return this.categories } set(categories){ this.categories = categories } 然而每当我尝试设置一个类别的程序只是崩溃,像这样stackOverflowError: ERR: stack=java.lang.StackOverflowError: stack size 8MB at com…..setCategories(Extensions.kt:0) at com…..setCategories(Extensions.kt:19) at com…..setCategories(Extensions.kt:19) at com…..setCategories(Extensions.kt:19) at com…..setCategories(Extensions.kt:19) at com…..setCategories(Extensions.kt:19) 这似乎是正确的语法来声明kotlin扩展。 所以我真的不确定我应该怎样去解决这个问题。也许我真的应该使用普通的旧的inheritance? 谢谢。

结果一样,但是测试用例没有通过单元测试

我只是碰了单元测试,今天遇到了一个很奇怪的问题,我用assertThat来判断两个对象是否相等,有一个测试用例不能通过,当我测试这个对象的时候: sealed class SummaryViewState : MviViewState { /** * 默认显示曲线图和标签汇总状态(首次进入页面) */ data class SummaryDataViewState( val points: List<Pair<Int, Float>>, // 曲线图点val months: List<Pair<String, Date>>, // 曲线图月份val values: List<String>, // 曲线图数值文本val selectedIndex: Int, // 曲线图选中月份索引val summaryItemList: List<SummaryListItem> // 当月标签汇总列表) : SummaryViewState() /** * 切换月份时标签汇总状态*/ data class SummaryGroupingTagViewState( val summaryItemList: List<SummaryListItem> // 当月标签汇总列表) : SummaryViewState() } 但是看结果是一样的: java.lang.AssertionError: […]

Kotlin:如何用扩展函数扩展enum类

我想用下面的函数扩展类型为String枚举类,但无法在调用站点使用它,如下所示: fun <T: Enum<String>> Class<T>.join(skipFirst: Int = 0, skipLast: Int = 0): String { return this.enumConstants .drop(skipFirst) .dropLast(skipLast) .map { e -> e.name } .joinToString() } MyStringEnum.join(1, 1); 我在这里做错了什么?

无法解析在扩展函数中提供给vararg参数的字符串

strings.xml中 <string name="my_string">Showing your number: %1$s</string> ActivityExt.kt fun Activity.showToast(textResId: Int, vararg formatArgs: String) { val text = getString(textResId, formatArgs) Toast.makeText(this, text, Toast.LENGTH_SHORT).show() } MainActivity.kt val number = 11 showToast(R.string.my_string, number.toString()) 吐司与以下文字显示: Showing your number: [Ljava.lang.String;@2cfa3b] 为什么会发生?

Kotlin:如何在事务类的上下文中运行服务方法?

我想在服务方法中定义数据库调用,但要在Transaction类的上下文中执行它们,而不必在服务本身中打开连接,以便可以在同一个事务中包含多个服务调用。 我正在寻找这样的东西,但不能完全弄清楚。 class Transaction { init { /** Grab connection **/ } fun doSelect() { … } } class UserService { fun Transaction.getUser() { return doSelect() } } fun main (args: Array<String>) { Transaction() { UserService().getUser() // INVALID … } } 有没有办法做到这一点? 我知道我可以像这样传递一个事务实例给服务: class UserService(tx: Transaction) { fun getUser() { with(tx) { doSelect() } } […]

这个引用在kotlin扩展属性的lazy初始值设定中

我正在尝试Kotlin,并希望为Activity实现一个惰性扩展属性: /** * Activity module */ val Activity.activityModule: ActivityModule by lazy { ActivityModule(this) } 编译器错误与: 'this' is not defined in this context 我怎样才能把这个作为Activity这个? 我已阅读指南,但无法得到它。 this@Activity说参考是未解决的。

扩展方法和扩展属性是不好的做法吗?

所以如果扩展方法和扩展属性真的是静态的方法和属性。 静态方法和属性和方法不是线程安全的,因此应该避免使用扩展方法和扩展属性。 我们只是被欺骗,因为我们编写的代码将显示为漂亮或干净,但性能方面则不然。 这是真的?