一个java ambiguous method 的问题

前段时间读一些代码,其中包含了若干复杂的implemens和extends关系,竟然在调用时出现了the method *** is ambiguous for the type *** . 一直觉得java中没有多继承,正常的多态怎么会形成这种问题。请看下面的场景:java

public class AmbiguousExpector {
    class A {
    }
    class B extends A implements IC{
    }
    interface IC {}
   
    void test(A a){}
    void test(IC b){}
   
    void ambiguous(){
        B b = new B();
        test(b);
    }继承

}编译

上述代码没法编译,
The method test(AmbiguousExpector.A) is ambiguous for the type AmbiguousExpector    AmbiguousExpector.java    class

line 20    Java Problem。test

缘由:变量

B extends A的同时implements IC,可是在Class AmbiguousExpector 中的test方法签名中,接受参数为A 或者 IC,不幸的是变量b此时既知足test(A a),又知足Test(IC b),因此产生了ambiguous的错误。扩展

能够尝试注释掉任意一个test方法,编译均可以经过。或者增长test(B b).方法

上述错误当使用generic的时候能够扩展以下:im


public class AmbiguousExpector {
    class A {
    }
    class B extends A implements IC{
    }
    interface IC {}
   
    <T extends A> void test(T a){}
    <V extends IC>void test(V b){}
//    void test(A a){}
//    void test(IC b){}
   
    void ambiguous(){
        B a = new B();
        test(a);
    }注释

}

结果同样。

相关文章
相关标签/搜索