私は、インタフェースとして「MyCollection」を持っています。addAllとcontainsAllの2つのメソッドだけで、パラメータとしてジェネリックコレクションをとります。どのようにしてこれらのメソッドをクラス内に効果的に実装して、どのタイプのコレクションでも動作させることができます。 これは私がこれまで何をやったかである:自分のジェネリックコレクションをJavaでどのように実装できますか?
インタフェース:
interface MyCollection<T extends Collection> {
boolean containsAll(T c);
boolean addAll(T c);
}
私はメソッドを実装
私のクラス:
public class MyPersonalCollection<E extends Collection> implements MyCollection {
private E myCollection;
public MyPersonalCollection(E myCollection) {
this.myCollection = myCollection;
}
public boolean containsAll(Collection c) {
return myCollection != null && myCollection.containsAll(c);
}
public boolean addAll(Collection c) {
return myCollection != null && myCollection.addAll(c);
}
}
やテスト:
@Test
public void testIfNewCollectionCanBeAdded() {
ArrayList<String> input = new ArrayList<>();
MyPersonalCollection<ArrayList<String>> myCollection = new MyPersonalCollection<>(input);
input.add("first");
input.add("secon");
input.add("third");
assertTrue(myCollection.addAll(input));
}
@Test
public void testIfMyCollectionContainsAnotherCollection() {
LinkedList<String> list = new LinkedList<>();
MyPersonalCollection<LinkedList<String>> myCollection = new MyPersonalCollection<>(list);
list.add("bacon");
list.add("tuna");
list.add("steak");
assertTrue(myCollection.addAll(list));
}
を
私も警告が表示されます:未処理の 'containsAll(Collection)'の生の型のメンバーとしてのJava.Util.Colle私のクラスでcontainsAll()メソッドとaddAll()メソッドを呼び出すと、 "ction"が返されます。 どうすればこの問題に取り組むことができますか?事前に多くの感謝!
ここ命名混乱を示唆しています。 Collectionを実装していない場合は、Collectionを使用する型を実装しています。さらに、 'Collection'は既にあなたが定義した二つのメソッドを持っています...おそらく、それ自身のコレクションではなく、コレクションの周りにユーティリティメソッドを構築しています。また、あなたのメソッドのシグネチャでは、現在、 'Set'を 'List 'に追加することができることに注意してください。 –
GPI
@Gustavo私の答えをご覧ください。私はそれがあなたの問題を解決すると思う – Troncador