繁体   English   中英

ArrayList.add返回String而不是boolean

[英]ArrayList.add return String instead of boolean

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

现在需要自定义,这表示当我们尝试在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM