具有这两种方法的接口:
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] 删除。
我来说两句