2016-12-22 3 views
1

Wir wissen, dass ArrayList.addboolean zurückgibt, was true oder false anzeigt.ArrayList.add gibt String statt Boolean zurück

Jetzt ist eine Anpassung erforderlich, die besagt, wenn wir versuchen und hinzufügen null in ArrayList gibt es eine benutzerdefinierte Zeichenfolge zurück. Nun wollen wir zum Beispiel sagen, geht es so

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

, wenn ich sehe, dass Hierarchie List Schnittstelle und Collection beide Rückgabetyp add als boolean haben, gibt es keine Bestimmung es vorran.

Bitte schlagen Sie vor, wie Sie vorgehen.

+2

Sie kann es einfach nicht außer Kraft setzen, da es keine solche Methode in 'ArrayList' ist. Sie können es jedoch * überladen *; aber Sie benötigen einen anderen Parameter für die Methode, um sie von 'boolean add (E)' zu unterscheiden. (Oder Sie könnten ihm einen anderen Namen geben). –

+2

Es klingt wie im Zusammenhang mit Ihrer gesamten Anwendung, dies sollte nicht die Aufgabe der "Add" -Methode der Liste sein. – user2357112

+1

"gibt boolean zurück, was auf wahr oder falsch hinweist." –

Antwort

4

Wie wäre es mit:

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

OP muss diese Antwort akzeptieren – CraigR8806

0

Eine Alternative ist Arraylist (oder einer anderen Implementierung) zu verlängern. Sie benötigen jedoch einen anderen Namen der Methode, z. B. 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")); 
} 
+0

, aber das würde Ihnen immer noch die Option geben, 'null' Werte mit der normalen' add' Methode einzufügen. – SomeJavaGuy

+0

Dann ist der Wrapper von fasseg eine gute Alternative. Wenn Sie wirklich hinzufügen müssen. Aber ein Wrapper ist immer noch ein Wrapper. – J2B

+0

Und Sie können auch add erweitern, und Ausnahme auslösen, wenn es mit Null verwendet wird – J2B

1

Sie können die Add-Methode mit der gleichen Signatur außer Kraft setzen und eine andere Art zurückzukehren. Da die Methode add(T t) in der Schnittstelle Collection als boolean zurückgegeben wird, müssen alle Methoden in der Typhierarchie mit der gleichen Signatur eine boolean zurückgeben.

Sie können aber:

Ändern Sie die Signatur von mehr Argumente hinzufügen:

public class MyList<T> extends ArrayList<T> { 

    public String add(T t, String success, String error){ 
     if (add(t)) { 
      return success; 
     } else { 
      return error; 
     } 
    } 
} 

oder

Ändern der Signatur durch eine andere Methode Namen:

public class MyList<T> extends ArrayList<T> { 

    public String addItem(T t){ 
     if (add(t)) { 
      return "success"; 
     } else { 
      return "error"; 
     } 
    } 
} 

oder

eine Wrapper-Klasse verwenden, die Aggregation eines ArrayList verwendet die zugrunde liegenden Vorgänge zu tun. Aber Sie müssen alle Methoden implementieren 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); 
    } 
} 
Verwandte Themen