繁体   English   中英

有界类型参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM