ArrayList.add返回String而不是boolean

时间:2016-12-22 11:50:26

标签: java arraylist

我们知道ArrayList.add会返回boolean,表示truefalse

现在需要进行自定义,当我们尝试在arrayList中添加null时,它会返回一个自定义字符串。让我们说例如它就像这样

public String add(Element e) {
   if (e == null) {
      return "StackOverflow";
   }
}

现在,当我看到层次结构List界面和Collection的返回类型add都为boolean时,没有提供覆盖它的内容。

请建议如何继续。

3 个答案:

答案 0 :(得分:4)

如何使用:

String someMethod(Element e) {
     if (e == null) {
         return "StackOverflow";
     }
     theList.add(element);
     return "someString"
}

答案 1 :(得分:1)

另一种方法是扩展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"));
}

答案 2 :(得分:1)

您无法使用相同的签名覆盖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);
    }
}