比如,我想通过这种方式改变所有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