[英]How to index class type of a java.util.Collections$UnmodifiableMap?
[英]How to create a class that implements java.util.collections
我正在尝试创建一个可以实现java.util.collections类的MyStack
类。 MyStack
将覆盖像添加收藏类的一些方法(类似于推),删除(类似于POP)等。我打算到类在同一行作为模型Set
,除了或集合类的其他接口MyStack
会不是接口或抽象类,我们可以创建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
我们高度赞赏任何代码修改,示例,我的代码更正,教程链接等。
一定要在你的课上加上<E>
规范:
public class MyStak<E> implements java.util.Collection<E>
^^^
如果您想让自己的生活更轻松,请尝试对AbstractCollection
子类化,而不是直接实现Collection
。 它为大多数方法提供了合理的默认实现,以最大限度地减少您需要编写的代码量。
java.util中
类
AbstractCollection<E>
此类提供
Collection
接口的骨干实现,以最大限度地减少实现此接口所需的工作量。要实现不可修改的集合,程序员只需要扩展此类并提供
iterator
和size
方法的实现。 (迭代iterator
方法返回的iterator
必须实现hasNext
和next
。)要实现可修改的集合,程序员必须另外覆盖此类的
add
方法(否则会抛出UnsupportedOperationException
),迭代iterator
方法返回的iterator
必须另外实现其remove
方法。程序员通常应该根据
Collection
接口规范中的建议提供void
(无参数)和Collection
构造函数。
你非常接近!
您只需要在子类中定义E:
public class MyStak<E> implements java.util.Collection<E>
这个想法是你可以有一个子类,例如<E, F, G>
,你实现了两个不同的接口,一个使用E,一个使用F.那,或者MyStak可以是专用的,并使用一个特定的类来Collection
而不是通用的E
还有一个建议,如果你计划实现自己的集合接口,考虑扩展相应的抽象类,而不是实现接口本身,导致抽象类实现方法一般到接口。 看看:AbstractCollection,AbstractSet,AbstractList
代替:
public class MyStak implements java.util.Collection<E>{
尝试:
public class MyStak<E> implements java.util.Collection<E>{
当我们实现Collection时,我们也必须实现Iterator<E>
。 哪个用于迭代您想要的项目。
是否定义了一个你真正想要实现的堆栈? 如果是这样,那么继续进行定义,甚至不用实现Collection接口 - 对于简单的情况就可以了。 或者使用现有的类 - java.util.Stack。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.