设置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 } 
  • Kotlin List尾巴function
  • 创建Kotlin对象的新实例
  • 如何创建像anko - DSL语法Kotlin嵌套函数回调
  • Android Studio 3无法建立kotlin片段
  • Android工作室插件ID:'kotlin-android-extensions'
  • Kotlin:创建扩展函数文件?加
  • Android SDK类上的Kotlin扩展函数的单元测试
  • 我想将我的kotlin版本添加到gradel项目中
  • Kotlin泛型期待意想不到的类型
  • kotlin是功能性的还是程序性的?
  • 创建Kotlin对象的新实例
  • Kotlin language will be the best programming language for Android.