设置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?

谢谢。

One Solution collect form web for “设置kotlin扩展名”

你的代码会抛出一个StackOverflowError因为它会自动调用它自己。 this.categories只调用它已经在的getter, this.categories = categories调用它已经在的setter。

扩展属性只是一对(扩展)getter和setter的语法糖。 在属性访问器(即getter和setter)中,只能访问已经从接收者类public访问的内容。 如果它具有公共字段,则可以访问它们,但不能定义新的字段。 如果你想保存更多的状态,但是这个类没有这个API,那你就不好运气了。

一个可变的扩展属性通常做的是重定向到现有的变异函数。 这是一个例子。

 //java class Foo { private List items; public String myItems() { return items; } } //kotlin var Foo.firstItem: String get() = myItems()[0] set(value) { myItems()[0] = value } 
  • 转换我现有的andorid工作室项目到kotlin?
  • Kotlin用Android构建问题
  • Android工作室插件ID:'kotlin-android-extensions'
  • 用Kotlin抛出异常
  • 如何在同一个src文件夹中运行不同的.kt文件/类?
  • Android Kotlin Extension超级通话
  • Android工作室插件ID:'kotlin-android-extensions'
  • 我想将我的kotlin版本添加到gradel项目中
  • kotlin扩展方法访问另一个kt
  • Kotlin的扩展
  • Kotlin内联扩展属性
  • Kotlin language will be the best programming language for Android.