[英]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...)
因為int
是long
(4.10.1)的子類型,所以第一種方法更具體(15.12.2.5) 。 注意,雖然int[]
不是long[]
(4.10.3)的子類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.