拥有这两种方法的接口:
void add(T result);
void add(List<T> result);
我期待Java在运行时会调用适当的方法:
final U result = getResult();
myInterface.add(result);
如果U
是一个列表,我认为会调用第二个方法,但总是调用第一个方法。
为什么会这样?应该以什么方式实现这一目标?
答案 0 :(得分:3)
这取决于U
的编译时类型。如果U
无限制,则编译器无法确定它是List
还是String
还是您的姨妈希尔达。
所以&#34;非通用化&#34;代码变成:
final Object result = getResult();
myInterface.add(result);
但是,如果U
实际上是<U extends List<?>>
,编译器可以缩小可能性(在您的帮助下)和&#34;非通用化&#34;代码变成:
final List result = getResult();
myInterface.add(result);
为您提供预期的重载方法调用。