这个程序来自effective java第二版,我不明白int[]是如何转换成列表的。有人能帮我解释一下吗。软件包示例。第4章,第18条;
// Concrete implementation built atop skeletal implementation - Page 95
import java.util.*;
public class IntArrays {
static List<Integer> intArrayAsList(final int[] a) {
if (a == null)
throw new NullPointerException();
return new AbstractList<Integer>() {
public Integer get(int i) {
return a[i]; // Autoboxing (Item 5)
}
@Override
public Integer set(int i, Integer val) {
int oldVal = a[i];
a[i] = val; // Auto-unboxing
return oldVal; // Autoboxing
}
public int size() {
return a.length;
}
};
}
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);
Collections.shuffle(list);
System.out.println(list);
}
}发布于 2010-12-13 16:39:00
该示例提供了一种快速将原始int数组包装成整数LIst的方法。在内部,它使用自动装箱在int和Integer之间进行转换。该技术可能很有用,因为在int[]和List之间没有类似转换。
基本技术是构建AbstractList的匿名实现。
public class IntArrays {
static List<Integer> intArrayAsList(final int[] a) {
if (a == null)
throw new NullPointerException();
return new AbstractList<Integer>() {
// code here
}
}这里的诀窍是final int[] a可用于实现方法。
在此之后,我们只需要提供AbstractList定义的接口的实现方法,即方法get()、set()和size()。
所以这些都很明显,很好地利用了自动装箱。
public Integer get(int i) {
return a[i]; // Autoboxing (Item 5)
}
public Integer set(int i, Integer val) {
int oldVal = a[i];
a[i] = val; // Auto-unboxing
return oldVal; // Autoboxing
}
public int size() {
return a.length;
}https://stackoverflow.com/questions/4426530
复制相似问题