我正在尝试创建一个实现java.util.collections类的类MyStack
。 MyStack
将覆盖集合类的一些方法,如add(类似于push),remove(类似于pop)等。我打算在与Set
或其他接口相同的行上对类进行建模集合类除了MyStack
不是接口或抽象类之外,我们可以创建类型为MyStack
的对象。
我的语法有问题,因为我不确定我是否正在朝着正确的方向前进。到目前为止我所有的都是这样的 - 注意 - 到目前为止还没有定义任何方法 - 我试图得到在继续定义方法之前的骨架。
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;
}
}
我有几个编译时错误,如 -
+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
我们非常感谢任何代码修改,示例,我的代码更正,教程链接等。
答案 0 :(得分:17)
确保在课堂上使用<E>
规范:
public class MyStak<E> implements java.util.Collection<E>
^^^
如果您想让自己的生活更轻松,请尝试对AbstractCollection
进行子分类,而不是直接实施Collection
。它为大多数方法提供了合理的默认实现,以最大限度地减少您需要编写的代码量。
<子> java.util中
Class
AbstractCollection<E>
此类提供
Collection
接口的骨干实现,以最大限度地减少实现此接口所需的工作量。要实现不可修改的集合,程序员只需要扩展此类并提供
iterator
和size
方法的实现。 (iterator
方法返回的迭代器必须实现hasNext
和next
。)要实现可修改的集合,程序员必须另外覆盖此类的
add
方法(否则会抛出UnsupportedOperationException
),并且iterator
方法返回的迭代器必须另外实现其remove
方法。程序员通常应根据
void
接口规范中的建议提供Collection
(无参数)和Collection
构造函数。
答案 1 :(得分:4)
你非常接近!
您只需要在子类中定义E:
public class MyStak<E> implements java.util.Collection<E>
这个想法是你可以有一个子类,比如<E, F, G>
,你实现了两个不同的接口,一个使用E,一个使用F.那,或者MyStak可以是专用的,并使用特定的类Collection
,而不是通用的E
。
答案 2 :(得分:2)
并建议,如果您计划实现自己的集合接口,请考虑扩展相应的抽象类,但不实现接口本身,导致抽象类实现方法一般到接口。 看看:AbstractCollection,AbstractSet,AbstractList
答案 3 :(得分:1)
而不是:
public class MyStak implements java.util.Collection<E>{
尝试:
public class MyStak<E> implements java.util.Collection<E>{
答案 4 :(得分:0)
当我们实施Collection时,我们也必须实现Iterator<E>
。用于迭代您想要的项目。
答案 5 :(得分:0)
定义一个你真正想要实现的堆栈吗?如果是这样,那么继续进行定义,甚至不用实现Collection接口 - 对于简单的情况就可以了。或者使用现有的类 - java.util.Stack。