2013-04-07 2 views
1

У меня есть назначение java, где я должен построить класс, который работает как Multiset. Класс должен реализовать интерфейс Collections. Я попытался сделать это и объявить все методы, которые находятся в Коллекциях (найдено here). Но когда я компилирую этот код, я получаю следующую ошибку:Проблемы с реализацией java.util.Collection <E> и методы переопределения

error: TreeMultisetNy is not abstract and does not override abstract method retainAll(Collection<?>) in Collection 

Почему это происходит?

Heres мой код:

import java.util.*; 

public class TreeMultisetNy<E extends Comparable<E>> implements Collection<E> { 
private Map<E, Integer> data = new TreeMap<E, Integer >(); 

public boolean add(E ny) { 
    return true; 
} 
public boolean addAll(Collection<? extends E> c){ 
    return false; 
} 
public void clear() { 

} 
public boolean contains(E what) { 
    return false; 
} 
public boolean containsAll(Collection<?> c) { 
    return false; 
} 
public boolean equals(E what) { 
    return false; 
} 
public int hashCode() { 
    return 0; 
} 
public boolean isEmpty() { 
    return false; 
} 
public Iterator<E> iterator() { 
    return null; 
} 
public boolean remove(E what) { 
    return false; 
} 
public boolean removeAll(Collection<?> c) { 
    return false; 
} 
public boolean retainAll(Collection<?> c) { 
    return false; 
} 
public int size() { 
    return 0; 
} 
public Object[] toArray() { 
    return null; 
} 
public Object[] toArray(Object[] a){ 
    return null; 
} 
} 

Я нашел этот вопрос: How to create a class that implements java.util.collections Но я не считаю, что я делаю ту же ошибку, как этот парень, или я ошибаюсь?

Пожалуйста, дайте мне несколько советов, я давно программировал php, но объектная ориентация для меня не новая!

+2

Попробуйте использовать подпись метода 'public boolean retainAll (Collection c)' вместо 'public boolean retainAll (Collection c)'. –

+0

и 'public boolean addAll (Collection c)'. Кроме того, посмотрите на AbstractCollection - расширение, которое вместо реализации всего интерфейса самостоятельно может сэкономить определенную работу. – Pyranja

+0

То, что они подразумевают под «не абстрактно», состоит в том, что, поскольку ваш класс не является абстрактным, он должен реализовать все методы. – flup

ответ

1

Правильные подписи для «All» методы заключаются в следующем:

boolean addAll(Collection<? extends E> c) 
boolean containsAll(Collection<?> c) 
boolean removeAll(Collection<?> c) 
boolean retainAll(Collection<?> c) 

Вы должны изменить свой класс, соответственно.

Кроме того, подпись версии 1-arg версии toArray() неверна. Это должно быть

public <T> T[] toArray(T[] a) 

Другие ошибки те же строки. Вам нужно тщательно пройти через свой класс, убедившись, что каждый метод имеет точную подпись.

Для получения более подробной информации см. Javadoc.

+0

Спасибо, что избавились от всех ошибок, кроме первого :) – user2254899

+0

@ user2254899: Какой из них первый? – NPE

+0

"error: TreeMultisetNy не является абстрактным и не переопределяет абстрактный метод preserveAll (Collection ) в коллекции" – user2254899

Смежные вопросы