Mam konstruktora, który ma 4 parametry: String, Object, Object, MyEnum
.W jaki sposób Intellij wybiera konstruktora po kliknięciu opcji Znajdź użycie?
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;
}
w 95% przypadków korzystania ostatni parametr null
, tak ja Aby utworzyć następną konstruktora która potrzebuje tylko trzech parametrów i określa ostatnią jako zerową.
Kilka pomysłów przyszło mi do głowy, ale w końcu dałem spróbować następujące rozwiązanie:
Zmień ostatni parametr z
MyEnum
doInteger
(błąd kompilacji - nie ma znaczenia):public MyClass(String name, Object val1, Object val2, Integer cat)
- Still wykorzystanie 202 findDodaj konstruktora z ostatniego parametru typ obiektu:
public MyClass(String name, Object val1, Object val2, Object cat)
a teraz pierwszy konstruktora (zInteger
) ma 196 zwyczaje i drugi 6.
Dokładnie tego chciałem (mam dokładnie 6 inwokacji z niezerowym ostatnim elementem), ale jaka jest przyczyna takiego zachowania? Czy Intellij dokonuje pewnych sprawdzeń i jeśli typem wejściowym jest MyEnum
, to nie można go przekazać jako typu Integer
, ale wartość null może zostać przekazana obu, więc dlaczego w przypadku pierwszego konstruktora jest 6 mniej wyników?
Gdy zmieniłem z Object
na String
(teraz mam 2 konstruktorów z String
i Integer
), oba dają mi 0, gdy biegnę znajduję użycie.
Dziękuję za wyjaśnienie tego zachowania.
Czy pytasz o prawa Java [zasady przeładowywania] (https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.9)? Czy próbujesz opisać w jakiś sposób, że "Znajdź użytki" w IDEA nie pasuje do tego, co faktycznie robi Java? –
Chcę tylko zrozumieć, w jaki sposób IDEA wybiera wyniki Find Usage w scenariuszu, który napisałem. – ruhungry