2016-12-22 30 views
1

ArrayList.addbooleanを返します。これはtrueまたはfalseを示しています。ArrayList.addブール値の代わりに文字列を返します

これで、arrayListにnullを追加しようとすると、カスタム文字列が返されるというカスタマイズが必要になりました。私は階層ListインターフェースとCollection両方がbooleanとしてaddの戻り値の型を持っていることを見たとき、それはこの

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

ように書き例えば貸し付けは今、それをオーバーライドする規定はありません。

進め方をお勧めします。使用方法について

+2

を実装する必要があります。あなたは*それをオーバーロードすることができます。 'boolean add(E)'との曖昧さを解消するために、このメソッドに別のパラメータが必要です。 (あるいは別の名前をつけることもできます)。 –

+2

あなたの全体的なアプリケーションの文脈のように聞こえますが、これはリストの 'add'メソッドの仕事ではありません。 – user2357112

+1

"はtrueまたはfalseを示すブール値を返します。 –

答えて

4

方法:

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

OPはこの回答を受け入れる必要があります。 – CraigR8806

0

代替は、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")); 
} 
+0

でも、通常の 'add'メソッドで' null'値を挿入するオプションが残っています。 – SomeJavaGuy

+0

その後、fassegのラッパーが良い選択肢です。あなたが本当に追加を使用しなければならない場合。しかし、ラッパーはまだラッパーです。 – J2B

+0

また、addを拡張してnullを使用すると例外をスローすることもできます。 – J2B

1

あなたは同じシグネチャを持つaddメソッドをオーバーライドして、異なるタイプを返すことはできません。 add(T t)メソッドはbooleanを返すようにCollectionインターフェイスに定義されているため、同じシグネチャを持つ型階層内のすべてのメソッドは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の集約を使用するラッパークラスを使用します。しかし、あなたは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); 
    } 
} 
関連する問題