Reputation: 3870
I am trying to create a class say MyStack
that would implement a java.util.collections class. MyStack
will override some methods of the collections class like add(similar to push), remove(similar to pop) etc.. I intend to model the class on the same lines as a Set
or other interfaces of the collection class except that MyStack
would not be an interface or abstract class and that we can create objects of type MyStack
.
I have problems with the syntax as I am not sure if I am proceeding in the right direction.All I have so far is something like this - NOTE - None of the methods have been defined so far - I am trying to get teh skeleton right before proceeding to define the methods.
import java.util.*;
public class MyStak implements java.util.Collection<E>{
public boolean add(E o){
return false;
}
public boolean addAll(Collection c){
return false;
}
public void clear() {
}
public boolean contains(Object o){
return false;
}
public boolean containsAll(Collection o){
return false;
}
public boolean equals(Object c){
return false;
}
public int hashcode(){
return 0;
}
public boolean isEmpty(){
return false;
}
public Iterator iterator(){
return null;
}
public boolean remove(Object o){
return false;
}
public boolean removeAll(Collection o){
return false;
}
public boolean retainAll(Collection o){
return false;
}
public int size(){
return 1;
}
public Object[] toArray(){
return null;
}
public Object[] toArray(Object[] a){
return null;
}
}
I have a couple of compile time errors like -
+public class MyStak implements java.util.Collection<E>{
Multiple markers at this line
- The type MyStak must implement the inherited abstract method
Collection<E>.add(E)
- E cannot be resolved to a type
+public boolean add(E o){
Multiple markers at this line
- E cannot be resolved to a type
- implements
java.util.Collection<E>.add
Any code modifications, examples , corrections to my code , links to tutorials etc will we highly appreciated.
Upvotes: 5
Views: 19442
Reputation: 9505
And one recommendation, if you plan to implement your own collection interface consider extending corresponding abstract class, but not implementing interface itself, cause abstract classes implement methods general to the interface. Look at: AbstractCollection, AbstractSet, AbstractList
Upvotes: 2
Reputation: 12401
Is defining a stack what you really want to achieve? If so, then go ahead and define it without even implementing Collection interface - it will be OK for simple cases. Or use an existing class - java.util.Stack.
Upvotes: 0
Reputation: 361595
Make sure to throw on a <E>
specification on your class as well:
public class MyStak<E> implements java.util.Collection<E>
^^^
If you want to make life easier on yourself try sub-classing AbstractCollection
instead of implementing Collection
directly. It provides reasonable default implementations for most of the methods to minimize the amount of code you need to write.
java.util
Class
AbstractCollection<E>
This class provides a skeletal implementation of the
Collection
interface, to minimize the effort required to implement this interface.To implement an unmodifiable collection, the programmer needs only to extend this class and provide implementations for the
iterator
andsize
methods. (The iterator returned by theiterator
method must implementhasNext
andnext
.)To implement a modifiable collection, the programmer must additionally override this class's
add
method (which otherwise throws anUnsupportedOperationException
), and the iterator returned by theiterator
method must additionally implement itsremove
method.The programmer should generally provide a
void
(no argument) andCollection
constructor, as per the recommendation in theCollection
interface specification.
Upvotes: 16
Reputation: 6353
When we implement Collection along with we must implement Iterator<E>
also. Which is use to iterate over the item on which you want.
Upvotes: 0
Reputation: 77732
You were VERY close!
You just need to define E in your subclass as well:
public class MyStak<E> implements java.util.Collection<E>
The idea is that you could have a subclass with, say, <E, F, G>
, and you implement two different interfaces, one using E, one using F. That, or MyStak could be specialized and use a specific class for Collection
, instead of a generic E
.
Upvotes: 4
Reputation: 143144
Instead of:
public class MyStak implements java.util.Collection<E>{
try:
public class MyStak<E> implements java.util.Collection<E>{
Upvotes: 1