これは私のコードです:
var header1: Record? = null
var header2: Record? = null
header2 = header1
header2.name = "new_name"
だが header1.name
も変わります!
同じオブジェクト(同じメモリのチャンク)を別の変数に割り当てているだけです。どういうわけか新しいインスタンスを作成してすべてのフィールドを設定する必要があります。
header2 = Record()
header2.name = header1.name
ただし、Kotlinでは、Recordクラスが Data class の場合、Kotlinがコピーメソッドを作成します。
data class Record(val name: String, ...)
...
header2 = header1.copy()
また、copyメソッドを使用すると、オーバーライドする必要のあるフィールドをオーバーライドできます。
header2 = header1.copy(name = "new_name")
変数の新しいインスタンスを作成し、すべてのフィールドを初期化する必要があります。 _header2 = header1
_だけを実行すると、_header1
_の参照も_header2
_に渡されます。
例(Java):
_public Record(Record record) {
this.name = record.name;
}
_
次に、次のように呼び出します:header2 = new Record(header1);
2番目のオブジェクトを完全に同じにする必要がある場合、または一部のフィールドを変更する必要がある場合は、copyメソッドを使用する2つのオプションがあります。
val alex = User(name = "Alex", age = 1)
val olderAlex = jack.copy(age = 2)
またはKotlinは、オブジェクトを構築するための優れた構文を取得しました。
createSomeObject(obj = ObjInput(name = objName,
password = UUID.randomUUID().toString()
type = listOf(TYPE)))
実際、あなたのケースでは最初のものを使用する方が簡単なようですが、このタスクを解決するための2番目の方法について知っておくと良いでしょう。