gpt4 book ai didi

java - 麻烦初始化 List 使用 Arrays.asList

转载 作者:搜寻专家 更新时间:2023-10-30 20:55:38 26 4
gpt4 key购买 nike

当我初始化 List 时,我可以这样做:

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

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});

关于java - 麻烦初始化 List<Object[]> 使用 Arrays.asList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39889498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com