我正在尝试学习泛型,我对通配符及其用法有一些疑问。
上限和下限的通配符之间有什么区别,具体来说,java中的<? extends Object>
和<? extends T>
之间有什么区别?
答案 0 :(得分:1)
点击此处查看有关“上限和下限”的问题 - SO link。
有关泛型check here
的概述至于<? extends Object>
和<? extends T>
之间的区别,前者是由类型java.lang.Object
绑定的类型,而后者是由类型变量T
绑定的 - 意味着您可以通过扩展java.lang.Object
(在所有Java类型中)的任何类型来满足前者和后者,您可以通过扩展类型T
的任何类型来满足。请记住,T可以是任何东西 - 甚至是java.lang.Object。
答案 1 :(得分:0)
<? extends Object>
ALMOST 无用。所有这些意味着你正在处理一些非原始类型的东西。 <? extends T>
表示您正在处理T
类型的对象或T
的子类,并且具有T
所拥有的任何方法和字段。
<? extends T>
对于声明Object应包含的内容非常有用。它限制了容器的范围或为方法/容器添加功能的方法。
例如:
public class foobination<T extends foo>
{
private <? extends T> foo;
public foobination(T foo)
{
this.foo = foo;
}
public getFoo() { return foo; }
public void myFoobinator(<? extends T> foob)
{
foo.bash("foobinator was here");
foo.setBang(foob.getBang());
}
}
另一个常见的用例是:List<? extends T>
你在哪里存储一些东西而你却不确切知道它是什么,但你知道它们都是T的子类。这样你至少可以知道什么期望从集合中退出。