具有泛型和泛型集合的Java重载方法

Ilopezluna

具有这两种方法的接口:

void add(T result);
void add(List<T> result);

我期望Java在运行时会调用适当的方法:

final U result = getResult();
myInterface.add(result);

如果U是列表,我认为第二个方法将被调用,但总是第一个方法被调用。为什么会这样呢?实现该目标的正确方法应该是什么?

财富

它取决于的编译时类型U如果U是无界的,则编译器无法确定是aList还是aString还是您的希尔达姨妈。因此,“未通电”代码变为:

final Object result = getResult();
myInterface.add(result);

但是,如果U实际上是<U extends List<?>>,则编译器可以(在您的帮助下)缩小范围,并且“未归类化”的代码变为:

final List result = getResult();
myInterface.add(result);

给您预期的重载方法调用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章