有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何创建数组。asList(int[])可以返回List<int[]>?

在做简单的程序时,我注意到了这个问题

int[] example = new int[10];
List<Integer> exampleList = Arrays.asList(example);// Compilation error here  

编译错误返回为cannot convert from List<int[]> to List<Integer>。但是List<int>在java中是不允许的,那么为什么会出现这种编译错误呢

我不是在质疑自动装箱,我只是想知道Arrays.asList如何返回List<int[]>

asList的实现是

public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}

所以它将int[]视为T,这就是为什么会发生这种情况


共 (2) 个答案

  1. # 1 楼答案

    Arrays.asList中没有对底层int进行自动装箱

    • int[]实际上是一个对象,而不是原语

    • 这里Arrays.asList(example)返回List<int[]>List<int>确实是无效语法

    • 你可以使用:

      列表<;整数>;exampleList=数组。asList(ArrayUtils.toObject(array))

      使用Apache Commons ArrayUtils

  2. # 2 楼答案

    Arrays.asList(...)可以完美地将对象数组转换为这些对象的列表

    也有,{{CD1}}是用Valg构造定义在java 5中,或者,按照顺序,它可以接受一个未定义的参数数量,在这种情况下,它将把所有这些参数看作数组的成员,然后返回包含这些元素的^ {< CD3>}实例。p>

    List<Object> objList = Arrays.asList(obj1, obj2, obj3);
    

    这意味着您可以使用单个元素创建列表:

    List<Object> objList = Arrays.asList(obj1);
    

    因为在java中不允许^ {CD4>},当使用^ {< CD5>}数组作为参数{{CD6>}时,它将被认为是列表的单个元素而不是^ {< CD7>}的数组。这是因为数组本身在Java中是对象,而int(以及任何其他原语)则不是

    因此,在转换基元数组时,Arrays.asList将尝试返回基元数组列表:

    List<int[]> intArrayList = Arrays.asList(new int[]{ 1, 2, 3 });