错误图片1
错误图片2
您好,我一直收到此错误,我完全不理解,非常感谢您的帮助。
谢谢
答案 0 :(得分:2)
Iterable是接口,这是Java中的一种特殊引用类型,它定义了必须由实现它的所有类实现的方法的约定。
对于Iterable
,有一种这样的方法,iterator。此方法返回一个Iterator对象,该对象将定义类实例上迭代的确切性质。
由于这个原因,尝试将implements Iterable<Name>
添加到您的类中而不指定iterator()
方法的实现会导致编译错误。
另一种选择是通过在类声明中的abstract
之前添加class
关键字,将该类声明为抽象类。
无法直接创建抽象类的实例,因此抽象类不必直接从接口实现方法。但是,任何从此类抽象类继承的类都必须从该接口实现方法,或者也必须声明为抽象。
在您的特定情况下,答案将取决于班级代码和您的要求。我建议您使用Register类的代码来编辑问题,以便提出更具体的解决方案。
如果将Name
对象存储在列表(或任何其他Collection数据结构)的Register
类中,则可能与使用列表的迭代器方法一样简单:
public class Register implements Iterable<Name> {
private List<Name> allNames = new List<>();
@Override
public Iterator<Name> iterator() {
return allNames.iterator();
}
}
之所以可行,是因为在这种情况下,List类已经包含了iterator()
方法的实现,因此可以直接调用它。
答案 1 :(得分:0)
编译器说您必须实现Iterator<String> iterator()
方法或使Register类成为抽象,并实现Iterator<String> iterator()
方法,这在继承链中较低的位置。
意思是,如果要注册可迭代的类,则必须遵守其合同,并提供一种获取该类迭代器的方法。
在Iterator<String> iterator()
实现中,您应该提供一个迭代器本身。其中一种方法是从您的私有列表类成员中返回迭代器,这可能会这样做:
public class Register implements Iterable<Name> {
private List<Name> names = new ArrayList<Name>();
@Override
public Iterator<String> iterator() {
return names.iterator();
}
}