是否可以将模板添加到数据类的getter / setter?

时间:2017-06-01 01:51:14

标签: intellij-idea kotlin

例如,我想以这种方式更改所有setter:

this.a = StringUtils.trim(a); 

如果它是一个java bean,我可以通过修改ide的代码生成模板来实现。但Intellij似乎不支持为kotlin数据类原子添加getter / setter。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:1)

从Kotlin 1.1开始,没有办法做到这一点。

Kotlin data class在很大程度上是一个班级,除了保存数据外什么都不做。

我认为最接近的是在类初始化时验证数据并使数据类属性为只读值。 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 ")

答案 1 :(得分:0)

如果您将该属性声明为私有,您可以创建自己的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
    }
}

但是当将属性传递给构造函数时,您仍会遇到问题。您可能需要重新考虑如何执行此操作,或者将字段声明为私有并在getter中对其进行修剪,或者不为此实例使用数据类。