Class<? extends Something>
如果我的翻译有误,请告诉我。
Class<? extends Something>
如果我的翻译有误,请告诉我。
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
}
你的理解基本正确。
Java基本上没有模板的概念(C++有),
这被称为泛型。
并且使用泛型定义了一个通用类Class<>,其中泛型属性可以是 Something 的任何子类。
如果你想了解模板和泛型之间的区别,请阅读“C++和Java中“generic”类型的区别是什么?”。
你说得对
定义是该类必须是Something的子类型
它与Class<T>相同,但有一个条件,即T必须extends Something或implements Something,如Anthony Accioly所建议的那样。
它也可以是类Something本身
Something接口……在处理泛型时,“extends”用于两者。 - Anthony Accioly你说得对。
在Java泛型中,?运算符表示“任意类”。extends关键字可以用来限定为“扩展/实现Something(或是Something)的任意类”。
因此,你有“某个类的Class,但该类必须是Something或者扩展/实现Something”。
? 在这里技术上不是一个运算符。 - Jesper你说得对。
然而,通常你会想要给继承Something的类命名,并写成例如<E extends Something>。如果使用?,你以后将无法对给定类型进行任何操作。