には、例えば、私はすべてのセッターをこのように変更する:データクラスのゲッター/セッターにテンプレートを追加することは可能ですか?
this.a = StringUtils.trim(a);
それがJava Beanの場合は、私はIDEのコード生成テンプレートを変更することによってこれを行うことができます。しかし、Intellijはコトリンデータクラスのゲッター/セッターを原子的に追加することをサポートしていないようです。
これを行う方法はありますか?
には、例えば、私はすべてのセッターをこのように変更する:データクラスのゲッター/セッターにテンプレートを追加することは可能ですか?
this.a = StringUtils.trim(a);
それがJava Beanの場合は、私はIDEのコード生成テンプレートを変更することによってこれを行うことができます。しかし、Intellijはコトリンデータクラスのゲッター/セッターを原子的に追加することをサポートしていないようです。
これを行う方法はありますか?
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 ")
プロパティをプライベートとして宣言すると、アクセスするための独自のゲッター/セッターを作成することができます。この例は私のために働く。
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
}
}
しかし、プロパティは、コンストラクタに渡されたとき、あなたはまだ問題があります。フィールドのプライベート宣言とゲッターでのトリミング、またはこのインスタンスのデータクラスを使用しない、これをどうやってやっているか再考する必要があります。
私見kotlinデータクラスは、カスタムセッター/ゲッターを持つことができない場合を除き、プライマリコンストラクタでは宣言されていません。 – glee8e