编程语言
首页 > 编程语言> > 具有泛型和泛型集合的Java重载方法

具有泛型和泛型集合的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<?>&gt ;,则编译器可以(在您的帮助下)缩小可能性,并且“未归纳化”的代码变为:

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

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

标签:generics,overloading,java
来源: https://codeday.me/bug/20191111/2020560.html