6

如果你有一個靜態導入類到java.lang.Integer而我的類也有一個靜態方法parseInt(String)那麼哪一個方法會調用parseInt("12345")指向?靜態導入方法重疊

在此先感謝!

回答

6

如果你在自己的班級內,它會調用你的方法。
如果您在班級之外(並且導入了兩個班級),則必須指定要使用的班級。

證明:http://java.sun.com/docs/books/jls/download/langspec-3.0.pdf $ 8和$ 6.3(見註釋)

+0

您能否顯示一個參考文獻,指出標準保證是這種情況?它可能是依賴於編譯器的... – amit 2012-01-02 12:06:01

+0

等待sm1回覆amit – MozenRath 2012-01-02 12:14:59

+2

從Java語言規範$ 8:成員(§8.2)的範圍(§6.3)是成員的類聲明的整個主體所屬。 |從6.3美元起:聲明的範圍是聲明中聲明的實體可以使用簡單名稱引用的程序區域(假設它是不可見的(§6.3.1))。 – Paranaix 2012-01-02 12:22:49

5

試試這個:

import static java.lang.Integer.parseInt; 

public class Test { 
    public static void main(String[] args) { 
     System.out.println(parseInt("12345")); 
    } 

    private static int parseInt(String str) { 
     System.out.println("str"); 
     return 123; 
    } 
} 

結果:

str 
123 

在你類中的方法是首先執行。

+2

您能否顯示一個引用,表明它是由標準保證的嗎?它可能是編譯器依賴... – amit 2012-01-02 12:05:32

+1

+1我喜歡這個證明。 – Bohemian 2012-01-02 12:08:57