[英]NullPointerException is Getting Thrown on ArrayList.add(String)
[英]ArrayList.add return String instead of boolean
我们知道ArrayList.add
返回的boolean
表示true
或false
。
现在需要自定义,这表示当我们尝试在arrayList中添加null
,它将返回一个自定义字符串。 比方说它像这样
public String add(Element e) {
if (e == null) {
return "StackOverflow";
}
}
现在,当我看到层次结构List
接口和Collection
都具有add
作为boolean
返回类型时,没有提供覆盖它的方法。
请建议如何进行。
如何使用:
String someMethod(Element e) {
if (e == null) {
return "StackOverflow";
}
theList.add(element);
return "someString"
}
另一种方法是扩展ArrayList(或另一个列表实现)。 但是您需要该方法的另一个名称,例如addElement。
public class MyArrayList<E> extends ArrayList<E> {
public String addElement(E e) {
if(e == null){
return "StackOverflow";
} else{
super.add(e);
return "Other";
}
}
}
@Test
public void addElement() throws Exception {
MyArrayList<String> strings = new MyArrayList<>();
assertEquals("StackOverflow", strings.addElement(null));
assertEquals("Other", strings.addElement("other"));
}
您不能使用相同的签名覆盖add方法并返回不同的类型 。 由于add(T t)
方法在Collection
接口中定义为返回boolean
,因此类型层次结构中具有相同签名的所有方法都必须返回boolean
。
但是,您可以:
通过添加更多参数来更改签名:
public class MyList<T> extends ArrayList<T> {
public String add(T t, String success, String error){
if (add(t)) {
return success;
} else {
return error;
}
}
}
要么
通过使用其他方法名称来更改签名:
public class MyList<T> extends ArrayList<T> {
public String addItem(T t){
if (add(t)) {
return "success";
} else {
return "error";
}
}
}
要么
使用包装类,该包装类使用ArrayList
聚合来执行基础操作。 但是您将必须实现所有方法get, add, size, etc
public static class MyArrayList<T> {
private List<T> list;
public MyArrayList() {
this.list = new ArrayList<T>();
}
public String add(T t) {
if (list.add(t)) {
return "success";
} else {
return "error";
}
}
public T get(int index) {
return list.get(index);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.