gpt4 book ai didi

java - 使用 List 参数实现泛型方法

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

我正在尝试定义然后实现一个抽象 setter ,它将对象列表作为参数。这是这个简单想法的要点:

public abstract class MyClass {
public abstract void setThings(List<?> things);
}

public class Bar extends MyClass {
private List<String> things;

@Override
public void setThings(List<String> things) {
this.things = things;
}
}

那是行不通的。我得到 Method does not override method from its superclassboth methods have the same erasure, but then override the other。我理解后一个与删除有关的错误,但即便如此我还是想不出正确的方法来做到这一点。我试过其他一些,例如:

public abstract <T> void setThings(List<T> things);

...以及其他一些。而且我在 SO 上发现了其他接近解决这个问题的问题/答案,但没有一个提供可靠的答案(至少我不清楚)。我已经通读了 the tutorials也无济于事。我错过了什么?

最佳答案

所以 Java 非常正确地告诉您您还没有实现抽象方法 setThings这需要 List<?>不是List<T>List<String> .所有这些都是不同的东西。参见 this question for a detailed explanation .

最简单的解决方案是为您的抽象类也引入一个泛型:

public abstract class MyClass<T> {
public abstract void setThings(List<T> things);
}

public class SubClass extends MyClass<String> {
private List<String> things;

public void setThings(List<String> things) {
this.things = things;
}
}

关于java - 使用 List 参数实现泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40096908/

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