2017-06-01 11 views
1

には、例えば、私はすべてのセッターをこのように変更する:データクラスのゲッター/セッターにテンプレートを追加することは可能ですか?

this.a = StringUtils.trim(a); 

それがJava Beanの場合は、私はIDEのコード生成テンプレートを変更することによってこれを行うことができます。しかし、Intellijはコトリンデータクラスのゲッター/セッターを原子的に追加することをサポートしていないようです。

これを行う方法はありますか?

+1

私見kotlinデータクラスは、カスタムセッター/ゲッターを持つことができない場合を除き、プライマリコンストラクタでは宣言されていません。 – glee8e

答えて

1

Kotlin 1.1ではこれを行う方法はありません。

Aコトリン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

プロパティをプライベートとして宣言すると、アクセスするための独自のゲッター/セッターを作成することができます。この例は私のために働く。

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 
    } 
} 

しかし、プロパティは、コンストラクタに渡されたとき、あなたはまだ問題があります。フィールドのプライベート宣言とゲッターでのトリミング、またはこのインスタンスのデータクラスを使用しない、これをどうやってやっているか再考する必要があります。

関連する問題