当我初始化列表时,我可以这样做:
List<Object[]> foo = new ArrayList<>();
foo.add(new Object[]{816, "foo", 2.6});
但是当我想使用它来简化它时Arrays.asList
:
List<Object[]> bar = Arrays.asList(new Object[]{"bar", 286});
它无法编译并出现错误:
incompatible types: inference variable T has incompatible bounds
equality constraints: java.lang.Object[]
lower bounds: java.lang.Object
为什么它不能正确进行类型推断以及如何解决这个问题?
请记住...
只是数组参数的语法糖。您可以使用可变参数调用方法foo(Object...)
要么使用
foo("hello", 1);
or
foo(new Object[]{"hello", 1});
因为编译器无论如何都会构造第二种形式。
因为编译器推断类型时不考虑接收者类型,所以它会查看Arrays.asList(new Object[]{"bar", 286})
并认为你的意思是创建一个列表Object
,不是单例列表Object[]
.
使用现有语法的最简单方法就是添加显式类型参数:
List<Object[]> bar = Arrays.<Object[]>asList(new Object[]{"bar", 286});
添加<Object[]>
告诉编译器 T 应该是什么。
或者,如果您不需要列表是可变的:
List<Object[]> bar = Collections.singletonList(new Object[]{"bar", 286});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)