例如,我想以这种方式更改所有setter:
this.a = StringUtils.trim(a);
如果它是一个java bean,我可以通过修改ide的代码生成模板来实现。但Intellij似乎不支持为kotlin数据类原子添加getter / setter。
有办法做到这一点吗?
答案 0 :(得分:1)
从Kotlin 1.1开始,没有办法做到这一点。
Kotlin data class在很大程度上是一个班级,除了保存数据外什么都不做。
我认为最接近的是在类初始化时验证数据并使数据类属性为只读值。 e.g:
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 ")
答案 1 :(得分:0)
如果您将该属性声明为私有,您可以创建自己的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
}
}
但是当将属性传递给构造函数时,您仍会遇到问题。您可能需要重新考虑如何执行此操作,或者将字段声明为私有并在getter中对其进行修剪,或者不为此实例使用数据类。