我有一個構造函數需要4個參數:String, Object, Object, MyEnum
。當我單擊查找用法時,Intellij如何選擇構造函數?
public MyClass(String name, Object val1, Object val2, MyEnum cat) {
// find in usage = 202
this.name = name;
this.val1 = val1;
this.val2 = val2;
this.cat = cat;
}
在95%的使用情況最後一個參數是null
,所以我想創建另一個構造函數,只需要3個參數,並將最後一個爲空。
一些想法來到我的腦海裏,但最後我給一個嘗試以下解決方案:
更改最後一個參數從
MyEnum
到Integer
(編譯錯誤 - 無所謂):public MyClass(String name, Object val1, Object val2, Integer cat)
- 還是202發現功能添加新的構造與對象類型的最後一個參數:
public MyClass(String name, Object val1, Object val2, Object cat)
現在第一個構造(與Integer
)具有196層的用途和第二個6.
這正是我想要的(我有6個非空最後一個元素的調用),但是這種行爲的原因是什麼? Intellij是否做了一些檢查,如果輸入類型是MyEnum
它不能作爲Integer
類型傳遞,但可以將null傳遞給兩者,那麼爲什麼在第一個構造函數的情況下有6個更少的結果呢?
當我從Object
更改爲String
(現在我有2個構造函數String
和Integer
),當我運行查找使用時,兩者都給我0。
謝謝你對這種行爲的解釋。
你在問關於Java的[重載規則](https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.9)嗎?或者你是否試圖描述IDEA中的「查找用法」與Java實際上不匹配的某種方式? –
我只想了解IDEA如何在發佈的場景中選擇查找用法的結果。 – ruhungry