我有一个inteface'MyCollection'只有两个方法:addAll和containsAll,它们作为一个泛型集合的参数。如何在我的课堂上有效实施这些方法,以便他们能够处理任何类型的集合。 这是我迄今所做的:如何在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 ',如果不容易出错,其含义至少是令人困惑的。 –
GPI
@古斯塔沃请看我的答案。我认为它解决了你的问题 – Troncador