このコードでこのエラーが発生するのはなぜですか? コレクションとArrayListの正しいインポートがあります
private ArrayList<String> tips;
public TipsTask(ArrayList<String> tips){
this.tips = Collections.shuffle(tips);
}
Collections.shuffle(tips);
Collections.shuffle は void を返します。void を に割り当てることはできませんArrayList
。
たとえば、次のことができます。
Collections.shuffle(tips);
this.tips = tips;
問題は、Collections.shuffle
メソッドが何も返さないことです。
これを試すことができます:
private ArrayList<String> tips;
public TipsTask(ArrayList<String> tips){
this.tips = new ArrayList<String>(tips);
Collections.shuffle(this.tips);
}
Collections.shuffle
配列をその場でシャッフルします。これで十分です。
private ArrayList<String> tips;
public TipsTask(ArrayList<String> tips){
this.tips = tips;
Collections.shuffle(tips);
}
または、元のリストを変更したくない場合:
private ArrayList<String> tips;
public TipsTask(ArrayList<String> tips){
this.tips = new ArrayList<String>(tips);
Collections.shuffle(this.tips);
}
Collections.shuffle(tips)
無効を返します。したがって、これをに割り当てることはできませんArrayList()
あなたが欲しいのは
private ArrayList<String> tips;
public TipsTask(ArrayList<String> _tips){
Collections.shuffle(_tips);
this.tips = _tips;
}
次のように呼び出す必要があります。
private ArrayList<String> tips;
public TipsTask(ArrayList<String> tips){
this.tips = tips;
Collections.shuffle(tips);
}
Collections.shuffle(tips) は ArrayList を直接変更します。コピーを作成する必要はありません。
次のように書くべきだと思います。
private List<String> tips;
public TipsTask(List<String> tips) {
this.tips = new ArrayList<String>(tips);
Collections.shuffle(this.tips);
}
もう一方の方法では、List を非公開にすることはできません。元の参照を持つ人は、あなたのプライベートな状態を操作できます。