Java 泛型 : Inferring types over two parameters

标签 java generics

假设我有一个像这样的简单方法来处理两个列表:

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/

相关文章:

java - 使用接口(interface)而不是类来定义泛型

Java:使用 char** 和回调作为参数加载 c++ dll

java - 如何在 Android Studio 中更改我的应用程序的包名称?

java - 带有命名空间的 XSLT 属性

java - 测试 PBEKeySpec junit

java - 如何处理防御性编程的各种情况?

java - 来自任何枚举的随机值

generics - Kotlin 接口(interface)构造函数

java - 为什么为非泛型方法或构造函数提供显式类型参数会编译?

asp.net-mvc - IList<> 返回类型而不是 List<>