【发布时间】:2016-12-19 12:47:12
【问题描述】:
我不确定是否可以像 java 对象一样设置 kotlin 扩展。
在我的程序中,我有一个名为 Submission 的 java 类,我想创建一个名为 categories 的 kotlin 扩展 - 一个 ArrayList - 所以我把它做成了这样。
var Submission.categories: ArrayList<String>
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 扩展的正确语法。所以我真的不确定我应该在哪个方向解决这个问题。也许我真的应该只使用普通的旧继承?
谢谢。
【问题讨论】:
-
您没有在 setter 中的 getter 中定义任何自定义逻辑,那么为什么需要它们?问题是由于setter声明不正确,
this.categories = categories会调用set()方法,导致死循环。 -
@Egor 啊,这很有意义。我定义 get 和 set 方法的原因是因为它拒绝在没有 get 方法和 return 语句的情况下进行编译。我认为这对于一组也是一样的,并且也这样做了。我将尝试删除设置的逻辑,看看会发生什么。