在java泛型中,通配符之间有什么区别:<! - ?扩展Object - >和<! - ?延伸T - >?

时间:2013-06-05 18:54:51

标签: java generics

我正在尝试学习泛型,我对通配符及其用法有一些疑问。

上限和下限的通配符之间有什么区别,具体来说,java中的<? extends Object><? extends T>之间有什么区别?

2 个答案:

答案 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的子类。这样你至少可以知道什么期望从集合中退出。