Bar
与完全跳过它们相比,在类中使用通配符类型的泛型有什么优势吗?
public class Foo<T> {}
public interface Bar {
public void addFoo(Foo<?> foo);
public Foo<?> getFoo(String name);
}
有很多优点。
Foo
是List
。如果您使用List
代替List<?>
,则可以执行以下操作:myBar.getFoo("numbers").add("some string");
即使该列表仅 应 包含Number
s。如果返回List<?>
,则您将无法添加 任何 内容(除外null
),因为列表类型未知。
Foo
使用某种 未知但特定的类型进行输入 。这个问题的答案表明,当方法采用通配符泛型类型时,可以访问或修改集合,但不能同时访问或修改集合。(凯西和伯特) 据我所知,方法do1有,因此d2只能被访问,不能被修改。方法d2具有,因此可以访问和修改c2,并且没有编译错误。 通用指南
我很困惑,如果下面的方法是相同的?有什么细微的区别吗? 非常感谢你的建议。 方法1 方法二
问题内容: 我不明白未绑定通配符泛型的用途。具有上限的绑定通配符泛型非常有意义,因为使用多态性,我可以使用该类型或集合。但是拥有可以是任何类型的泛型有什么意义呢?它是否违背了泛型的目的?编译器没有发现任何冲突,并且在类型擦除之后,就好像没有使用任何泛型一样。 问题答案: 当您的方法实际上并不关心实际类型时,未绑定类型可能很有用。 一个原始的例子是这样的: 由于可以处理所有引用类型(通过调用),因此
问题内容: 我对Java中的通用通配符有两个疑问: 和之间有什么区别? 什么是有界通配符,什么是无界通配符? 问题答案: 在你的第一个问题中,并且是有界通配符的示例。无限制的通配符看起来像,基本上就是<? extends Object>。宽松地表示泛型可以是任何类型。有界通配符(或)通过说它必须扩展特定类型(称为上限)或必须是特定类型的祖先(称为下限)来对类型进行限制。
所以我在阅读泛型以重新熟悉这些概念,尤其是在涉及通配符的地方,因为我很少使用或遇到通配符。从我的阅读中,我不明白他们为什么使用通配符。下面是我经常遇到的一个例子。 你为什么不这样写: oracle网站上的另一个示例: 为什么这不是写成 我错过什么了吗?
下面是一个通用搜索算法的实现: 接口: (方括号=弧形括号) 问题出在哪里?我想不通...对泛型参数T也进行了扩展。