不兼容的返回类型(Java) 公共类示例{ } 接口A{ void remove();//删除一个元素(如果存在) } 接口B{ int remove();//删除所有元素并返回计数 }
这只是示例代码。它显示错误不兼容的返回类型(Java) 公共类示例{ } 接口A{ void remove();//删除一个元素(如果存在) } 接口B{ int remove();//删除所有元素并返回计数 },java,type-parameter,Java,Type Parameter,这只是示例代码。它显示错误 错误:(1,22)java:类型B和A不兼容; 两者都定义remove(),但返回类型不相关 如何纠正? 您必须使用实现而不是扩展,因为A和B是接口 您必须重写A和B的方法 public class Example<T extends A & B> { } interface A{ void remove(); // removes one element if present } interface B{ int remo
错误:(1,22)java:类型B和A不兼容; 两者都定义remove(),但返回类型不相关 如何纠正?
实现
而不是扩展
,因为A和B是接口
public class Example<T extends A & B> {
}
interface A{
void remove(); // removes one element if present
}
interface B{
int remove(); // removes all element and returns the count
}
从@Sweeper注释中,我可以看出,在创建示例类的对象时,类应该同时实现接口A和B,这在我的情况下是不可能的,因为两者都有相同的方法名,所以错误是合理的,所以实现类也会产生错误。我同意编译器的观点:)您希望Java做什么如果对类型为
T
的变量调用remove
?它将调用哪个remove
?只需更改您的方法即可name@NitinSinghal同意,但如果它的内置类如Map和List@vikalprusia如果返回类型必须同时为int
和void
(由不同的接口定义),您将如何实现remove()
方法,那么这里的解决方案就很明显了——不要编写毫无意义的代码。:)不要使用Map&List
,尝试其他方法。您只需更改接口方法的名称,而不提供任何答案说明。请回顾您的答案,并添加更多关于提问者应该做什么以及为什么这样做的细节。
public class T implements A , B {
public T(){
super();
}
@Override
public void remove1(){
}
@Override
public int remove2(){
return 0;
}
}
interface A{
void remove1(); // removes one element if present
}
interface B{
int remove2(); // removes all element and returns the count
}