[英]Bounded type parameters
抱歉,这可能是一个幼稚的问题。
我对有限类型参数和通配符有些困惑。 <T extends String>
和<? extends String>
区别<? extends String>
<? extends String>
?
谢谢
第二个基本上意味着:您真的不在乎实际类型。 您只关心它会扩展String。
换句话说:如果您的代码不需要在任何地方使用“ T”; 那么您可以通过“完全不提类型名称T”来使意图更清晰。
对于更多的技术背景, Angelika Langer的工作是最好的资源之一。
我认为您在这里混淆了一些事情。
声明泛型类时使用<T extends String>
。
<? extends String>
<? extends String>
用于已经通用的类的实例。
让我们以集合框架中的“列表”接口为例: List <E>
与List <E extends Object>
这意味着您可以将列表用于从对象继承的每个数据类型。
通配符<?>
仅可用于已经通用的类。 从上面以List<E>.
为例List<E>.
假设您有一个使用List的方法,但您不想允许每个从Object继承的数据类型。
您可以使用不同的数据类型,例如:
public void myMethod(List<String> list){
//…
}
但是,您也可以使用要允许的一系列数据类型:
public void myMethod(List<? extends String> list{
//..
}
在第二个示例中,您可以使用每个与字符串协变的数据类型,即是字符串的子代。
Tldr:
边界<T extends String>
用于声明泛型类支持的数据类型范围。
通配符<? extends String>
<? extends String>
用于已经通用的类,并将给定的数据类型限制/限制在一定范围内。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.