[英]in Java syntax, Class<? extends Something>
Class<? extends Something>
这是我的解释,它是类模板,但是类 ? 意味着类的名称未确定,它扩展了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 中的“泛型”类型之间有什么区别? ”。
你是对的
定义是该类必须是Something的子类型
它与Class<T>
相同,但有一个条件,即T
必须像 Anthony Accioly 建议的那样extends Something
或implements Something
它也可以是类Something
本身
你是对的。
在 Java 泛型中, ?
运算符的意思是“任何类”。 extends
关键字可用于将其限定为“任何扩展/实现Something
(或为Something
)的类。
因此,你有“ Class
的一些类,但这个类必须是或扩展/实现Something
”。
你是对的。
然而,通常你会想要命名扩展Something的类并编写例如<E extends Something>
。 如果你使用?
你以后不能对给定的类型做任何事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.