美文网首页
Java坑爹指南

Java坑爹指南

作者: anyoptional | 来源:发表于2019-04-13 21:18 被阅读0次

  java.util包中的工具类Arrays有一个静态方法:

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

它接收一个或多个T的实例,返回一个指向List的引用。如上,jdk中的实现是返回一个ArrayList。再看这个函数的注释:

   /**
     * Returns a fixed-size list backed by the specified array.  (Changes to
     * the returned list "write through" to the array.)  This method acts
     * as bridge between array-based and collection-based APIs, in
     * combination with {@link Collection#toArray}.  The returned list is
     * serializable and implements {@link RandomAccess}.
     */

嗯???返回一个定长的数组?!我就不信邪啊,ArrayList不能添加元素了?

    List list = Arrays.asList(1, 2, 3); 
    list.add(3);

还真不行,调用add函数触发UnsupportedOperationException,翻找了一下,这个异常是在AbstractList抛出来的,然后我就更奇怪了,还让不让人玩耍了。

    List list = new ArrayList<Integer>();
    list.add(3);

这明明可以!
  十五分钟过去了,仍然一脸懵逼。
  奈何天纵奇才,我仔细一看,asList函数里面返回的根本不是java.util.ArrayList,而是一个定义在Arrays里面的静态类,只不过名字相同。我xxoo(此处省略)。能不能长点心好好取个名!FixedSizeArray?ImmutableArray?怪不得被Oracle收购了(笑)。
  以上只是今儿被气到了(强颜欢笑😀)。

相关文章

网友评论

      本文标题:Java坑爹指南

      本文链接:https://www.haomeiwen.com/subject/roarwqtx.html