在Java语法中,类<?扩展了一些东西>

2022-08-31 16:24:09

Class<? extends Something>

这是我的解释,这是类模板,但类?表示类的名称未确定,并且它扩展了 Something 类。

如果我的解释有问题,请告诉我。


答案 1

这里有一些令人困惑的答案,所以我会尝试解决这个问题。您可以这样定义一个泛型:

public class Foo<T> {
    private T t;
    public void setValue(T t) {
        this.t = t;
    }
    public T getValue() {
        return t;
    }
}

如果您希望 Foo 上的泛型始终扩展类 Bar,则可以将其声明为:

public class Foo<T extends Bar> {
    private T t;
    public void setValue(T t) {
        this.t = t;
    }
    public T getValue() {
        return t;
    }
}

在声明变量时使用 。?

Foo<? extends Bar>foo = getFoo();

DoSomething(List<? extends Bar> listOfBarObjects) {
    //internals
}

答案 2

你几乎是对的。基本上,Java没有模板的概念(C++有)。这称为泛型。这定义了一个泛型类,其中泛型的属性是 的任何子类。Class<>Something

如果你想了解模板和泛型之间的区别,我建议你阅读“C++和Java中的”泛型“类型之间的区别是什么?”。


推荐