拥有这两种方法的界面:
我期望Java在运行时会调用适当的方法:
如果
void add(T result);
void add(List<T> result);
我期望Java在运行时会调用适当的方法:
final U result = getResult();
myInterface.add(result);
如果
U
是一个列表,我认为第二个方法会被调用,但实际上总是调用了第一个方法。为什么会出现这种情况?应该如何正确地实现呢?
myInterface
是什么类型的 - 在您当前的上下文中,T
和U
分别代表什么? - luk2302add(T)
和addAll(List<T>)
。这就是List
如何解决这个问题的方式。 - ObicereT
将被替换为Object
。因此,传递一个List
可以使用任一方法。不确定编译时的情况。 - Tim BiegeleisenT
是一个String
,而U
是一个List<String>
。 - IgnasimyInterface
是类型为YourInterface<List<String>>
,那么第一个方法将被调用;如果它是类型为YourInterface<String>
,我期望第二个方法将被调用。如果 U == T,那么无论它们是列表、列表的列表还是简单的字符串,我都期望第一个方法将被调用。 - luk2302