Arrays.asList() 不能正常工作吗?

Arrays.asList() 不能正常工作吗?

 

我有一个float[],现在希望将将其转换为形同元素的List。比较傻的方法是将其一个一个的加进去,但是我想用 Arrays.asList方法。在这个过程中出现了一些问题。

这样是有效的:

List<Integer> list = Arrays.asList(1,2,3,4,5);

但是这样是无效的:

int[] ints = new int[] {1,2,3,4,5};
List<Integer> list = Arrays.asList(ints);

据我所知,asList 方法接受一个varargs 参数,这个可变参数是数组的简写。

 

问题:

1. 为什么对二段代码返回的是一个List<int[]>而不是List<int>。

2. 是否存在一种正确转换的方法。

3. 为什么自动类型转换没有起作用,例如 int[]转换为Integer[]。

 

回答:

在java的基础支持中没有List<int>这种东西。

自动封装只发生在单个元素之间,不会发生在基本数组类型中。

至于如何实现它,不同的libraries 有大量的方法实现这一目的。这是没有办法解决的问题,而且我认为JDK中也没有什么能让它变得更容易。

 

译者注:

1. 泛型不可能是基本数据类型。T只能是类,不能用基本数据类型填充。但可以使用包装类填充。

2. asList的实现细节: 参见https://www.cnblogs.com/liqing-weikeyuan/p/7919720.html

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

值得注意的是return new ArrayList<>(a);中的ArrayList并不是ArrayList.class而是Arrays$ArrayList这样一个内部类

3. 对于可变参数T... a。如果初始化为("aa", "bb")。在函数内部,a就是String[2]。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值