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收购了(笑)。
以上只是今儿被气到了(强颜欢笑😀)。
网友评论