具有泛型和泛型集合的Java重载方法
作者:互联网
具有这两种方法的接口:
void add(T result);
void add(List<T> result);
我期望Java在运行时会调用适当的方法:
final U result = getResult();
myInterface.add(result);
如果U是一个列表,我想第二个方法将被调用,但总是第一个方法被调用.
为什么会这样呢?实现该目标的正确方法应该是什么?
解决方法:
这取决于U的编译时类型.如果U是无界的,则编译器无法确定它是List还是String还是您的Hilda姨妈.
因此,“未通电”代码变为:
final Object result = getResult();
myInterface.add(result);
但是,如果U实际上是< U扩展List<?>> ;,则编译器可以(在您的帮助下)缩小可能性,并且“未归纳化”的代码变为:
final List result = getResult();
myInterface.add(result);
给您预期的重载方法调用.
标签:generics,overloading,java 来源: https://codeday.me/bug/20191111/2020560.html