是否有可能添加一个模板的数据类的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中进行修剪,或者对此实例不使用数据类。