JAVA:嵌套在公共类的迭代器中
所以对于一个学校项目,我需要创建一个私有方法来实现迭代器接口。我有我的方法SetIterator,它看起来像这样:JAVA:嵌套在公共类的迭代器中,java,iterator,nested,Java,Iterator,Nested,所以对于一个学校项目,我需要创建一个私有方法来实现迭代器接口。我有我的方法SetIterator,它看起来像这样: private class SetIterator implements Iterator<T> { private T[] items; private int count; private int current; private SetIterator(T[] elements, int size) { items = ele
private class SetIterator implements Iterator<T> {
private T[] items;
private int count;
private int current;
private SetIterator(T[] elements, int size) {
items = elements;
count = size;
current = 0;
}
private boolean hasNext() {
return (current < count);
}
private T next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return items[current++];
}
私有类SetIterator实现迭代器{
私人物品;
私人整数计数;
私有电流;
私有SetIterator(T[]元素,int size){
项目=要素;
计数=大小;
电流=0;
}
私有布尔hasNext(){
返回(当前<计数);
}
二等兵{
如果(!hasNext()){
抛出新的NoTouchElementException();
}
返回项目[当前+++];
}
但是,我无法编译,因为我收到以下错误消息:
ArraySet.java:311: error: next() in ArraySet.SetIterator cannot implement next() in Iterator
private T next() {
^
attempting to assign weaker access privileges; was public
where T,E are type-variables:
T extends Comparable<? super T> declared in class ArraySet
E extends Object declared in interface Iterator
ArraySet.java:307: error: hasNext() in ArraySet.SetIterator cannot implement hasNext() in Iterator
private boolean hasNext() {
^
attempting to assign weaker access privileges; was public
ArraySet.java:311:error:ArraySet.SetIterator中的next()无法在迭代器中实现next()
二等兵{
^
正在尝试分配较弱的访问权限;是公共的
其中T,E是类型变量:
迭代器是一个接口。因此,它的方法是公共的。你不能实现这个方法并使它私有
将可见性更改为public
public boolean hasNext() {
return (current < count);
}
public boolean hasNext(){
返回(当前<计数);
}
迭代器是一个接口。因此,它的方法是公共的。您不能实现该方法并将其设为私有
将可见性更改为public
public boolean hasNext() {
return (current < count);
}
public boolean hasNext(){
返回(当前<计数);
}
错误是不言自明的:next
和hasNext
在Iterator
中是公共的,因此不能将它们设为私有的。将private
更改为public
,错误应该会消失。错误是不言自明的:next
和hasNext
在中是公共的erator
因此不能将它们设置为私有。将私有
更改为公共
,错误应该会消失。出现此错误的原因是无法将“较弱”权限分配给从超类重写或从接口实现的方法
由于在Java接口上定义的方法默认情况下是public
,因此Java编译器阻止我们使用较弱的访问权限来实现这些方法,例如protected
或private
。这样做的原因是因为面向对象编程的固有原理—子类的实例通常,在需要其超类的实例时,s应该是可用的(通过签出可以更好地理解这个概念)
总之,将SetIterator
的hasNext()
和next()
方法声明为public,因为它们实现了Iterator
接口的方法。出现此错误的原因是您无法分配“较弱的”从超类重写或从接口实现的方法的权限
由于在Java接口上定义的方法默认情况下是public
,因此Java编译器阻止我们使用较弱的访问权限来实现这些方法,例如protected
或private
。这样做的原因是因为面向对象编程的固有原理—子类的实例通常,在需要其超类的实例时,s应该是可用的(通过签出可以更好地理解这个概念)
总之,将SetIterator
的hasNext()
和next()
方法声明为public,因为它们实现了Iterator
接口的方法。如果您知道在Java中过度使用的规则,就不会遇到这个问题
尝试在google上搜索Java中的重写规则。从这里开始:
永远记住这条经验法则:永远不要缩小方法的范围,在重写方法时可以增加方法的范围,但永远不能取消它。如果您知道重写inr Java的规则,就不会遇到这个问题
尝试在google上搜索Java中的重写规则。从这里开始:
永远记住这条经验法则:永远不要缩小方法的范围,你可以在重写它的同时增加方法的范围,但永远不能取消它。使next()
public
:public T next(){
。使next()
public
:public T next(){
。我想我只是认为在私有类中使用公共方法会违反封装。谢谢:我想我只是认为在私有类中使用公共方法会违反封装。谢谢:D