比如,我想通過這種方式改變所有setter方法:是否可以將模板添加到數據類的getter/setter?
this.a = StringUtils.trim(a);
如果它是一個java bean中,我可以通過修改代碼生成的IDE模板做到這一點。但是Intellij似乎不支持爲kotlin數據類自動添加getter/setter。
有沒有辦法做到這一點?
比如,我想通過這種方式改變所有setter方法:是否可以將模板添加到數據類的getter/setter?
this.a = StringUtils.trim(a);
如果它是一個java bean中,我可以通過修改代碼生成的IDE模板做到這一點。但是Intellij似乎不支持爲kotlin數據類自動添加getter/setter。
有沒有辦法做到這一點?
從Kotlin 1.1開始,沒有辦法做到這一點。
Kotlin data class大多數情況下是「除了保存數據什麼都不做」的類。
我認爲最接近你可以在類初始化時驗證你的數據,並使你的數據類屬性爲只讀值。例如:
data class Data(val a: String) {
init {
require(a == a.trim())
}
}
下面將不會拋出異常:
val a = Data("ab")
val b = a.copy(a = "abc")
雖然下面的意志:
val c = a.copy(a = "abc ")
看起來好像你將屬性聲明爲私有屬性,你可以創建自己的getter/setter來訪問它。這個例子適用於我。
fun main(args: Array<String>) {
var t = test("foo")
t.setHello("bar")
println(t)
}
data class test(private var hello: String) {
fun setHello(blah: String) {
this.hello = blah
}
}
但是,當將屬性傳遞給構造函數時,您仍然會遇到問題。您可能需要重新考慮如何執行此操作,或者將該字段聲明爲private並在getter中修剪它,或者不對此實例使用數據類。
恕我直言科特林數據類不能有定製的setter/getter方法,除非它沒有在主構造函數中聲明。 – glee8e