簡體   English   中英

用varargs重載方法的行為

[英]Behavior of method overloading with varargs

我有兩個重載方法,varargs int和long。 當我運行測試傳遞整數時,似乎更喜歡varargs long方法。 然而,如果我使方法靜態並使用整數運行,它似乎更喜歡varargs int方法。 這里發生了什么?

void varargs(int... i){

    System.out.println("Inside int varargs");
    for(int x : i)
        System.out.println(x);
}

void varagrs(long... l){

    System.out.println("Inside long varargs");
    for(long x : l)
        System.out.println(x);
}

static void staticvarargs(int...i)
{
    System.out.println("Inside static int varargs");
    for(int x : i)
        System.out.println(x);
}

static void staticvarargs(long...l)
{
    System.out.println("Inside static long varargs");
    for(long x : l)
        System.out.println(x);
}

public static void main(String args[]){
    VarArgs va = new VarArgs();
    va.varagrs(1);
    staticvarargs(1);
}

輸出:

里面長的varargs 1

內部靜態int varargs 1

編輯:我應該選擇更好的方法名稱。 有一個錯字varargs,varagrs。 謝謝zhong.j.yu指出這一點。

更正的代碼和預期的行為:

void varargs(int... i){

    System.out.println("Inside int varargs");
    for(int x : i)
        System.out.println(x);
}

void varargs(long... l){

    System.out.println("Inside long varargs");
    for(long x : l)
        System.out.println(x);
}

static void staticvarargs(int...i)
{
    System.out.println("Inside static int varargs");
    for(int x : i)
        System.out.println(x);
}

static void staticvarargs(long...l)
{
    System.out.println("Inside static long varargs");
    for(long x : l)
        System.out.println(x);
}

public static void main(String args[]){
    VarArgs va = new VarArgs();
    va.varargs(1);
    staticvarargs(1);
}

輸出:

在int varargs 1

內部靜態int varargs 1

這是一個錯字

void varagrs(long... l){
         ^^ 

這就是為什么有一個帶拼寫檢查的IDE很好(例如IntelliJ)

修復錯誤后,編譯器選擇(int...) over (long...)因為intlong (4.10.1)的子類型,所以第一種方法更具體(15.12.2.5) 注意,雖然int[]不是long[] (4.10.3)的子類型。

暫無
暫無

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

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