不兼容的返回类型(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是接口

  • 您必须重写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
     }