gpt4 book ai didi

java - 设置具有相同的删除,但都不会覆盖另一个错误

转载 作者:行者123 更新时间:2023-12-02 12:02:28 25 4
gpt4 key购买 nike

我的作业基本上是重写一组方法,以便它可用于我创建的名为 Square 的自定义类。 。我不断收到错误:

error: name clash: removeAll(Collection<Square>) in SquareSet and removeAll(Collection<?>) in Set have the same erasure, yet neither overrides the other
public boolean removeAll(Collection<Square> objects) {

我导入了 SetCollection在我的代码和类的开头 SquareSet实现Set<Square>

    public boolean removeAll(Collection<Square> objects) {
Square[] newSet;
int count = 0;
for(Square each : objects) {
count -= 1;
newSet = new Square[(daSet.length)-count];
for (int i = 0; i < daSet.length; i++) {
if (daSet[i].equals(each)) {
if(i == 0) {
for (int j = 1; j < daSet.length ; j++) {
newSet[j - 1] = daSet[j];
}
} else if (i == ((daSet.length) - 1)) {
for (int j = 0; j < daSet.length ; j++) {
newSet[j] = daSet[j];
}
} else {
for (int j = 0; j < i; j++) {
newSet[j] = daSet[j];
}
for (int j = i; j < newSet.length; j++){
newSet[j] = daSet[j+1];
}
}
}
}
}

我知道当参数与我要覆盖的参数类型不同时,方法会被重载而不是被覆盖。但我仍然不明白为什么会收到此错误。

最佳答案

因为您正在实现Set<Square> ,您自然会期望 removeAll方法为removeAll(Collection<Square>) ,但不幸的是在 Set接口(interface), removeAll method is removeAll(Collection<?>) ,用通配符代替泛型类型参数。这会导致您的错误 - Collection<Square>Collection<?> 不兼容.

至于为什么会这样,this question处理这个问题。基本上,当类似移除的方法完全泛化时,设计者无法让它正常工作。

要正确实现该接口(interface),您的参数类型必须为 Collection<?> 。这意味着 each 的类型必须是Object ,并且您必须对其进行类型检查以查看它是否是 Square .

此外,您需要更仔细地调整新数组的大小,并且仅当您有要从数组中删除的匹配项时才如此。

关于java - 设置具有相同的删除,但都不会覆盖另一个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47148405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com