1. 程式人生 > >java 呼叫方法引起歧義:The method XXX is ambiguous for the type XX

java 呼叫方法引起歧義:The method XXX is ambiguous for the type XX

The method XXX is ambiguous for the type XX

eclipse編譯報錯。

分析原因:方法歧義,是編譯器無法確定,程式碼中使用哪一個方法。

1、呼叫的是自己編寫的方法

public class Ambiguous {
    public static void main(String[] args) {
        Ambiguous ambiguous = new Ambiguous();
        ambiguous.Para(null);
    }

    public void Para(String a) {
        System.out.println("String型別a" + a);
    }

    public void Para(StringBuffer a) {
        System.out.println("StringBuffer" + a.toString());
    }
}

顯然null作為引數,會導致編譯器無法識別呼叫哪一個方法。

這種情況,有一種特例是,如果方法的引數有繼承關係,那麼編譯器可以確定呼叫哪個方法,確定的原則是”我要的,你都有“。

2、呼叫庫方法。

有些庫靜態方法很多靜態欄位很多,為了方便呼叫呼叫,常常這樣寫:

import static org.csdn.linghushaoxia.Demo.*;
<pre name="code" class="java">import static org.csdn.linghushaoxia.Demo1.*;

如果,碰巧在別的包裡面,存在相同的方法,可就麻煩了,不容易查詢。

比如,呼叫了Demo.init()靜態方法,程式碼裡直接就寫init();

在Demo1裡面有Demo1.init(),程式碼裡再直接寫init();必然引起歧義了。

在查出歧義之後,就好解決了,加上包就可以了。

這樣子:

org.csdn.linghushaoxia.Demo.init();