簡體   English   中英

方法重載 - Java

[英]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.

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