假设我有一个像这样的简单方法来处理两个列表:
public static <B> void foo(List<B> list1, List<B> list2) {
}
假设我想这样调用它:
foo(ImmutableList.of(), ImmutableList.of(1));
这不会编译,因为 javac
不够聪明,无法弄清楚我正在尝试创建两个整数列表。相反,我必须写:
foo(ImmutableList.<Integer>of(), ImmutableList.of(1));
我应该如何更改 foo
的声明以允许第一个版本和第二个版本一样工作?
最佳答案
我很确定 Java 的类型推断不够强大,无法处理统一。
您可以做的是返回某种中间对象,并将调用站点更改为:
foo(list1).and(list2)
但是那样的话它仍然只能从左到右进行推断,所以你必须这样调用它:
foo(ImmutableList.of(1)).and(ImmutableList.of());
关于Java 泛型 : Inferring types over two parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10221489/