是否有可能添加一个模板的数据类的getter / setter?
例如,我想以这种方式更改所有设置者:
this.a = StringUtils.trim(a);
如果它是一个java bean,我可以通过修改ide的代码生成模板来做到这一点。 但是Intellij似乎不支持为kotlin数据类自动添加getter / setter。
有没有办法做到这一点?
Kotlin 1.1没有办法做到这一点。
一个Kotlin 数据类 ,大部分是一个“除了保存数据什么都不做”的类。
我认为最接近你可以在类初始化时验证你的数据,并使你的数据类属性为只读值。 例如:
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中进行修剪,或者对此实例不使用数据类。