2017-06-01 98 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中修剪它,或者不對此實例使用數據類。

相關問題