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,除非它没有在主构造函数中声明。