Java 在单个类冲突中实现迭代器和ResultSet接口
我有一个场景,其中一个类需要实现迭代器和ResultSet接口 代码如下所示 错误也显示在上面Java 在单个类冲突中实现迭代器和ResultSet接口,java,multiple-inheritance,Java,Multiple Inheritance,我有一个场景,其中一个类需要实现迭代器和ResultSet接口 代码如下所示 错误也显示在上面 你能建议是否有其他办法来解决这个问题吗 之所以出现此错误,是因为Resultset和Iterable中都有method next(),但返回值不同 resultset next的返回值为布尔值 迭代器的下一个返回值是E 但是调用签名是相同的。在java中,只更改返回值不会得到多态性;这导致了编译器错误 您可以在类中使用composition include Resultset作为实例变量,而不是继承
你能建议是否有其他办法来解决这个问题吗 之所以出现此错误,是因为Resultset和Iterable中都有method next(),但返回值不同 resultset next的返回值为布尔值 迭代器的下一个返回值是E 但是调用签名是相同的。在java中,只更改返回值不会得到多态性;这导致了编译器错误 您可以在类中使用composition include Resultset作为实例变量,而不是继承
public class MyClass<E> implements Iterator<E>, Iterable<E>{
private ResultSet resultset;
}
公共类MyClass实现迭代器,Iterable{
私有结果集结果集;
}
ResultSet和Iterable
不同时实现如何?@Makoto感谢您的建议。但那不是我想要的…那我不确定你想要什么。编译器告诉您,Iterator
和ResultSet
都实现了next()
方法,它们之间不兼容。如果调用(subassofmyclass).next()
,编译器实际上无法判断您将使用哪个next
方法。您必须选择-这是实现ResultSet
,还是实现Iterable
?@Makoto是的,我理解。感谢您详细解释为什么它不能。那么这是否意味着没有解决办法,我应该删除一个接口?我真的不知道为什么要这样做,但唯一的方法是创建一个中介类,每个中介类实现迭代器和结果集,并将这些类实例化到抽象类中。如前所述,编译器将不允许有两个具有相同签名和不同返回类型的实现,因为编译器将其解释为重复的方法!