如何调用泛型方法?[java]

ohtdti5x  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(213)

我有以下接口和实现:

public interface Box<T> extends Serializable {

    String getLabel();
    T getContent();
}
public class BananaBox implements Box<Banana> {

    private String label;
    private Banana content;

    public String getLabel() {
        return label;
    }

    public Banana getContent() {
        return content;
    }
}

然后我在一个方法中使用这些类:

public void openAllBoxes(Set<Box> boxes) {
}

public class do() {
    this.openAllBoxes(mySet)
}

我的IDE intelliJ突出显示了Set<Box>,因为它使用了参数化类'Box',所以我将其设置为泛型:

public <T extends Box<T>> void openAllBoxes(Set<T> boxes) {
}

但是现在我的方法openAllBoxes(mySet)是无效的,因为它需要一个Set<T>而不是Set<Box>。确切的错误是reason: no instance(s) of type variable(s) T exist so that Banana conforms to Box<T>,我不明白应该做什么和为什么。
谢谢!

tcomlyy6

tcomlyy61#

感谢您的回答,我实际上混淆了两个泛型参数,正确的方法定义是

public <T, U extends Box<T>> void openAllBoxes(Set<U> boxes) {
jaxagkaj

jaxagkaj2#

如果您确实不太关心Box的元素类型,无法将其全部打开,则可以避免原始类型警告,并为该元素类型指定一个带有签名的名称

public void openAllBoxes(Set<? extends Box<?>> boxes) {
// ...
}

这个签名至少和操作员的回答一样通用。

相关问题