簡體   English   中英

varargs 何時開始與 no-arg 不沖突?

[英]When varargs started to not conflict with no-arg?

今天我發現以下代碼編譯並運行時沒有任何警告:

public class Try_MultipleArguments2 {

    public static void main(String[] args) {

        myfunction();

        myfunction(1, 2, 3);

    }

    public static void myfunction(int ... as) {
        System.out.println("varags called");
    }

    public static void myfunction() {
        System.out.println("noarg called");
    }
}

我記得很清楚,不是那么早。

這是 JVM 更改還是我的內存故障???

它如何區分無參數和可變參數?

更新

以下代碼也可以正常運行:

public class Try_MultipleArguments2 {

    public static void main(String[] args) {

        myfunction();

        myfunction(1, 2, 3);

    }

    public static void myfunction(int ... as) {
        System.out.println("varags called");
    }

//    public static void myfunction() {
//        System.out.println("noarg called");
//    }
}

這些是重載方法。 編譯器知道編譯的main應該從方法簽名中調用哪個方法。 請參閱此規范

調用方法時(第 15.12 節),在編譯時使用實際參數(和任何顯式類型參數)的數量和參數的編譯時類型來確定將被調用的方法的簽名(第 15.12.2 節)。

此外,所選擇的方法是最具體的方法 看到這個 在這種情況下,無參數方法比可變參數版本更具體 - 再次檢查參數數量以查看選擇哪種方法。

它的功能在后端重載。

您的void myfunction(int ... as)接受多個參數,而您的void myfunction()沒有參數。 我看不出這有什么問題。 方法重載

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM