我正在尝试学习泛型,我对通配符及其使用有一些疑问。
上限和下限的通配符有什么区别,特别是:<? extends Object>
和<? extends T>
在java中的区别是什么?
<? 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 的子类。这样,您至少对期望从收藏中获得什么有所了解。