[英]Method Overloading - Java
實際問題:如果它調用 (1) 那么我怎樣才能使它調用 (2) ?
我有以下方法簽名
public void myMethod(String myStr, MyClass myClass) {...} // (1)
public void myMethod(Object... objects) {...} // (2)
我在某個地方打電話
myMethod(new String("name"), new MyClass());
將調用哪個重載方法? 如果它調用(1)那么我怎樣才能使它調用(2) ?
它將調用 (1),因為方法解析算法優先考慮不使用可變參數的方法。
要強制它使用(2),您可以傳遞一個數組或將第一個參數轉換為Object
:
myMethod(new Object[] { "name", new MyClass() });
//or
myMethod((Object) "name", new MyClass());
在 Java 中,它采用最具體的方法。 這是根據 Java JLS 15.12.2.5 。
這個文檔說:
如果多個成員方法既可訪問又適用於方法調用,則必須選擇一個成員方法來為運行時方法分派提供描述符。 Java 編程語言使用選擇最具體的方法的規則。
如果您需要調用泛型方法,我認為您需要將每個參數轉換為泛型類型Object
為:
myMethod((Object) "hello", (Object) new MyClass());
或者,用作
myMethod(new Object[]{"name", new MyClass()});
我會簡單地說。 鑒於您正在調用構造函數並傳遞一個 String 和一個 MyClass 對象,它顯然會調用重載方法,該方法接受兩個參數,一個 String 作為 arg 1,一個 MyClass 對象作為 arg 2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.