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最初に設定された値 (変更可能なオブジェクトへの単なる参照) を新しい参照に変更できないというだけで、「深い」不変性は付与されません。