1700443570
1700443571
弄清楚了问题,修改方案也就诞生了,直接使用包装类即可,代码如下:
1700443572
1700443573
public static void main(String[]args){
1700443574
1700443575
Integer[]data={1,2,3,4,5};
1700443576
1700443577
List list=Arrays.asList(data);
1700443578
1700443579
System.out.println(“列表中的元素数量是:”+list.size());
1700443580
1700443581
}
1700443582
1700443583
仅仅修改了加粗字体部分,把int替换为Integer即可让输出元素数量为5。需要说明的是,不仅仅是int类型的数组有这个问题,其他7个基本类型的数组也存在相似的问题,这就需要读者注意了,在把基本类型数组转换成列表时,要特别小心asList方法的陷阱,避免出现程序逻辑混乱的情况。
1700443584
1700443585
注意 原始类型数组不能作为asList的输入参数,否则会引起程序逻辑混乱。
1700443586
1700443587
1700443588
1700443589
1700443591
编写高质量代码:改善Java程序的151个建议 建议66:asList方法产生的List对象不可更改
1700443592
1700443593
上一个建议指出了asList方法在转换基本类型数组时存在的问题,接着我们看一下asList方法返回的列表有何特殊的地方,代码如下所示:
1700443594
1700443595
enum Week{Sun, Mon, Tue, Wed, Thu, Fri, Sat}
1700443596
1700443597
public static void main(String[]args){
1700443598
1700443599
//五天工作制
1700443600
1700443601
Week[]workDays={Week.Mon, Week.Tue, Week.Wed, Week.Thu, Week.Fri};
1700443602
1700443603
//转换为列表
1700443604
1700443605
List<Week>list=Arrays.asList(workDays);
1700443606
1700443607
//增加周六也为工作日
1700443608
1700443609
list.add(Week.Sat);
1700443610
1700443611
/*工作日开始干活了*/
1700443612
1700443613
}
1700443614
1700443615
很简单的程序呀,默认声明的工作日(workDays)是从周一到周五,偶尔周六也会算作工作日加入到工作日列表中。不过,这段程序执行时会不会有什么问题呢?
1700443616
1700443617
编译没有任何问题,但是一运行,却出现了如下结果:
1700443618
1700443619
Exception in thread”main”java.lang.UnsupportedOperationException
[
上一页 ]
[ :1.70044357e+09 ]
[
下一页 ]