gpt4 book ai didi

java - 此 AbstractList 如何返回整数对象列表

转载 作者:行者123 更新时间:2023-11-30 08:49:15 25 4
gpt4 key购买 nike

在浏览 Effective Java 示例时,我无法理解下面的代码。这个匿名抽象类如何在不遍历数组元素或调用 add() 方法的情况下返回对象列表。

下面代码的幕后发生了什么?

    public static void main(String[] args) {
int a[] = new int[10];
for (int i = 0; i < a.length; i++) {
a[i] = i;
}
List<Integer> list = intArrayAsList(a);
System.out.println(list);
}

static List<Integer> intArrayAsList(final int[] a) {
if (a == null) {
throw new NullPointerException();
}
return new AbstractList<Integer>() {

@Override
public Integer get(int index) {
return a[index];
}

@Override
public int size() {
return a.length;
}

@Override
public Integer set(int index, Integer element) {
int oldVal = a[index];
a[index] = element;
return oldVal;
}
};
}

最佳答案

未调用 add 的原因是它从未创建新列表。新的 AbstractList 只是持有对数组“a”的引用,当您迭代新的 AbstractList 时,它只会在数组中查找。

为了好玩,尝试从该行中删除关键字“final”:

static List<Integer> intArrayAsList(final int[] a) {

它不会再编译了。原因是因为 AbstractList 是一个匿名类,为了能够使用变量,该变量需要是最终的。

关于java - 此 AbstractList 如何返回整数对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31515710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com