问题描述
我有一个 CustomList,它可以根据需要执行所有操作,直到我遇到 String.join(" ",list)
或 list.toArray(String[]::new)
之类的代码不适用于我的 CustomList 但适用于 ArrayList。我做错了什么?
class CustomList implements List<String> {
private List<String> list;
public CustomList() {
list = new ArrayList<String>();
}
//implemented overridden methods
}
String.join(" ",list)
抛出 NullPointerException。
list.toArray(String[]::new)
返回 null。
public <T> T[] toArray(T[] a) {
list.toArray(a);
return a;
}
public Iterator<String> iterator() {
return list.iterator();
}
解决方法
list.toArray(String[]::new)
不适合我编译。
也许,你使用类的方式是错误的。
我实现了这些方法:
@Override
public Iterator<String> iterator() {
return list.iterator();
}
@Override
public <T> T[] toArray(T[] a) {
return list.toArray(a); // Better not to return a,but should work either way.
}
然后我测试了 CustomList
:
CustomList strings = new CustomList();
strings.addAll(Arrays.asList("A","B","C"));
Iterator<String> iterator = strings.iterator();
String firstStr = iterator.next();
System.out.println("Iterator test: "+ firstStr);
String[] arr = new String[strings.size()];
strings.toArray(arr);
System.out.println("toArray() test: "+ Arrays.toString(arr));
String join = String.join(" ",strings);
System.out.println("String.join test: "+join);
输出:
Iterator test: A
toArray() test: [A,B,C]
String.join test: A B C