在Java语法中,Class <?扩展某事>

lil*_*lzz 53 java generics

Class<? extends Something>

这是我的解释,它是班级模板但课程?表示类的名称未确定,它扩展了Something类.

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

Dan*_*ses 44

这里有一些令人困惑的答案,所以我会尝试清除它.您可以定义泛型:

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

如果你想要Foo上的泛型总是扩展类Bar,你可以这样声明它:

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

?当你声明一个变量被使用.

Foo<? extends Bar>foo = getFoo();
Run Code Online (Sandbox Code Playgroud)

要么

DoSomething(List<? extends Bar> listOfBarObjects) {
    //internals
}
Run Code Online (Sandbox Code Playgroud)


Kri*_*izz 34

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

我建议阅读" C++和Java中的"通用"类型之间有什么区别? "如果你想获得模板和泛型之间的区别.


Jan*_*cak 10

你是对的

定义是该类必须是Something的子类型

它是一样的Class<T>,但有一个条件T必须extends Somethingimplements Something安东尼Accioly建议

它也可以是类Something本身

  • 或者实现`Something`接口......当处理泛型时,"extends"用于两者. (3认同)

Mac*_*Mac 7

你是对的。

在 Java 泛型中,?运算符的意思是“任何类”。的extends关键字可被用于限定要“,其延伸/器具任何类Something(或 Something)。

因此,您有“Class某个类的,但该类必须是或扩展/实现Something”。