-1

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

上限和下限的通配符有什么区别,特别是:<? extends Object><? extends T>在java中的区别是什么?

4

2 回答 2

1

在此处查看有关“上限和下限”的问题 - SO link

有关泛型的概述,请查看此处

<? extends Object>至于and之间的区别<? extends T>,前者是受类型绑定的类型java.lang.Object,而后者受类型变量绑定T- 这意味着您可以满足java.lang.Object在前者和后者,您可以通过扩展 type 的任何类型来满足T。请记住,T 可以是任何东西——甚至是 java.lang.Object。

于 2013-06-05T19:44:15.297 回答
0

<? extends Object>几乎没用。这意味着您正在使用非原始类型的东西。 <? 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 的子类。这样,您至少对期望从收藏中获得什么有所了解。

于 2013-06-05T18:59:21.017 回答