JavaPojoインスタンス変数を'val'に設定し、初期化後にその状態を変更しています。これは実際には「var」なので問題が発生しますか?
val st = new Pojo();
st.setInt(0);
JavaPojoインスタンス変数を'val'に設定し、初期化後にその状態を変更しています。これは実際には「var」なので問題が発生しますか?
val st = new Pojo();
st.setInt(0);
それはまだval
です。参照を変更することはできませんが、参照されるオブジェクトの内部状態を変更することはできます。
val
この再割り当てを行うことができないことを意味します:
val st = new Pojo()
st = new Pojo() // invalid!
これには、次のものが必要ですvar
。
var st = new Pojo()
st = new Pojo() // ok
ではありませんvar
。もう一度st=new Pojo()
やり直してみると、新しい値を st に再割り当てできないことがわかります (コンパイラは文句を言いerror: reassignment to val
ます)。
val
最初に設定された値 (変更可能なオブジェクトへの単なる参照) を新しい参照に変更できないというだけで、「深い」不変性は付与されません。