类型不匹配:无法将void转换为ArrayList<String>

3
为什么我在这段代码中会出现错误?我已经正确导入了ArrayList和Collections。
private ArrayList<String> tips;

public TipsTask(ArrayList<String> tips){
    this.tips = Collections.shuffle(tips);
}

1
提示:Collections.shuffle的方法签名是什么?特别是要注意错误信息(它说“无法将void / nothing分配给ArrayList变量”),shuffle返回什么?文档应足以回答这个问题。在类型错误时,始终首先检查相关的定义/类型 - 没有问题,只有不正确的用法。 - user2246674
6个回答

8
Collections.shuffle(tips);

Collections.shuffle方法返回void,因此您无法将void赋值给ArrayList

您可以尝试以下操作:

    Collections.shuffle(tips);
    this.tips = tips;

3
问题在于Collections.shuffle方法没有返回值。
你可以尝试这样做:
private ArrayList<String> tips;

public TipsTask(ArrayList<String> tips){
    this.tips = new ArrayList<String>(tips);
    Collections.shuffle(this.tips);
}

3

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);
}

1

Collections.shuffle(tips) 返回 void,因此您不能将其分配给一个 ArrayList()

您需要的是

private ArrayList<String> tips;

public TipsTask(ArrayList<String> _tips){
    Collections.shuffle(_tips);
    this.tips = _tips;
}

1
你应该这样调用它:

private ArrayList<String> tips;

public TipsTask(ArrayList<String> tips){
    this.tips = tips;
    Collections.shuffle(tips);
}

Collections.shuffle(tips) 直接修改 ArrayList,不需要创建副本。


1
我认为你应该这样写:

private List<String> tips;

public TipsTask(List<String> tips) {
    this.tips = new ArrayList<String>(tips);
    Collections.shuffle(this.tips);
}

另一种方法是破坏使List变为私有。拥有原始引用的人可以操纵您的私有状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接