2017-06-01 99 views
1

比如,我想通过这种方式改变所有setter方法:是否可以将模板添加到数据类的getter/setter?

this.a = StringUtils.trim(a); 

如果它是一个java bean中,我可以通过修改代码生成的IDE模板做到这一点。但是Intellij似乎不支持为kotlin数据类自动添加getter/setter。

有没有办法做到这一点?

+1

恕我直言科特林数据类不能有定制的setter/getter方法,除非它没有在主构造函数中声明。 – glee8e

回答

1

从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 ") 
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 
    } 
} 

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

相关问题