Intellij idea 是否可以向数据类的getter/setter添加模板?
例如,我希望通过以下方式更改所有设置器:Intellij idea 是否可以向数据类的getter/setter添加模板?,intellij-idea,kotlin,Intellij Idea,Kotlin,例如,我希望通过以下方式更改所有设置器: this.a = StringUtils.trim(a); 如果它是JavaBean,我可以通过修改ide的代码生成模板来实现这一点。但Intellij似乎不支持为kotlin数据类自动添加getter/setter 有办法做到这一点吗 如果将属性声明为private,则可以创建自己的getter/setter来访问它。这个例子对我很有用 fun main(args: Array<String>) { var t = test("
this.a = StringUtils.trim(a);
如果它是JavaBean,我可以通过修改ide的代码生成模板来实现这一点。但Intellij似乎不支持为kotlin数据类自动添加getter/setter
有办法做到这一点吗 如果将属性声明为private,则可以创建自己的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
}
}
fun main(args:Array){
var t=测试(“foo”)
t、 setHello(“酒吧”)
println(t)
}
数据类测试(私有变量hello:String){
有趣的setHello(废话:字符串){
你好,等等
}
}
但是当属性传递给构造函数时,仍然会有问题。您可能需要重新考虑如何执行此操作,或者声明字段为private并在getter中对其进行修剪,或者不为此实例使用数据类。从Kotlin 1.1开始,没有办法做到这一点 Kotlin在很大程度上是一个“只保存数据”的类 我认为最接近的方法是在类初始化时验证数据,并将数据类属性设置为只读值。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 ")
IMHO kotlin数据类不能有自定义setter/getter,除非它没有在主构造函数中声明。