java常见错误总结

1. 现象:将数组转为List后进行removeAll()操作,报java.lang.UnsupportedOperationException错误。

 代码:

    /**
     * 获取标记ID
     * @return 标记ID
     */
    private Long getSignId() {
        Long[] signIds = {1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L,
                                    26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L};
        List<Long> allSignIds = Arrays.asList(signIds);
        List<Long> existsSignIds = groupManageMapper.findSignId();
        // 留下未用的标记ID
        allSignIds.removeAll(existsSignIds);
        return allSignIds.size() == 0 ? null : allSignIds.get(0);
    }

 错误:

java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(AbstractList.java:161)
    at java.util.AbstractList$Itr.remove(AbstractList.java:374)
    at java.util.AbstractCollection.removeAll(AbstractCollection.java:376)

 解决方式:

    /**
     * 获取标记ID
     * @return 标记ID
     */
    private Long getSignId() {
        Long[] signIds = {1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L,
                                    26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L};
        List<Long> allSignIds = new ArrayList<>(Arrays.asList(signIds));
        List<Long> existsSignIds = groupManageMapper.findSignId();
        // 留下未用的标记ID
        allSignIds.removeAll(existsSignIds);
        return allSignIds.size() == 0 ? null : allSignIds.get(0);
    }

 详解:数组转化为List的注意点

    A. 该方法不适用于基本数据类型(byte,short,int,long,float,double,boolean,char);

    B. 该方法将数组与列表链接起来,当更新其中之一时,另一个自动更新;

              C. 不支持add、remove、removeAll和clear方法。

猜你喜欢

转载自www.cnblogs.com/ruhuanxingyun/p/10598000.html
今日推荐