Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在单个类冲突中实现迭代器和ResultSet接口_Java_Multiple Inheritance - Fatal编程技术网

Java 在单个类冲突中实现迭代器和ResultSet接口

Java 在单个类冲突中实现迭代器和ResultSet接口,java,multiple-inheritance,Java,Multiple Inheritance,我有一个场景,其中一个类需要实现迭代器和ResultSet接口 代码如下所示 错误也显示在上面 你能建议是否有其他办法来解决这个问题吗 之所以出现此错误,是因为Resultset和Iterable中都有method next(),但返回值不同 resultset next的返回值为布尔值 迭代器的下一个返回值是E 但是调用签名是相同的。在java中,只更改返回值不会得到多态性;这导致了编译器错误 您可以在类中使用composition include Resultset作为实例变量,而不是继承

我有一个场景,其中一个类需要实现迭代器和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是的,我理解。感谢您详细解释为什么它不能。那么这是否意味着没有解决办法,我应该删除一个接口?我真的不知道为什么要这样做,但唯一的方法是创建一个中介类,每个中介类实现迭代器和结果集,并将这些类实例化到抽象类中。如前所述,编译器将不允许有两个具有相同签名和不同返回类型的实现,因为编译器将其解释为重复的方法!