Java泛型方法与泛型和泛型的集合

时间:2017-03-31 07:38:53

标签: java generics overloading

拥有这两种方法的接口:

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

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

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

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

1 个答案:

答案 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);

为您提供预期的重载方法调用。