Czy sygnatura metody w klasie / interfejsie Java zawiera zwracany typ?
Przykład:
Czy Java zna różnicę między tymi dwiema metodami:
public class Foo {
public int myMethod(int param) {}
public char myMethod(int param) {}
}
A może liczy się tylko nazwa metody i lista parametrów?
java
method-signature
faressoft
źródło
źródło
Odpowiedzi:
Cytowanie z Oracle Docs :
Ponieważ pytanie zostało zredagowane w celu uwzględnienia tego przykładu:
Nie, kompilator nie rozpozna różnicy, ponieważ ich podpis:
myMethod(int param)
jest taki sam. Druga linia:da ci błąd: metoda jest już zdefiniowana w klasie , co dodatkowo potwierdza powyższe stwierdzenie.
źródło
foo.bar(baz);
?W Javie tak nie jest, ale w tej JVM robi, co może prowadzić do oczywistego zamieszania.
To samo, co w przypadku metod klasowych.
Nazwa metody i typy parametrów dla języka Java. Na przykład opisy parametrów i nazwy nie mają znaczenia.
źródło
Na poziomie kodu bajtowego „typ zwracany” jest częścią sygnatury metody. Rozważ to
w kodzie bajtowym są 2 metody clone ()
różnią się tylko zwracanym typem.
źródło
Nie, nie w Javie. Nazwa metody i lista parametrów służą tylko do podpisu metody . Typ zwrotu nie obejmuje.
źródło
Java Language Spec mówi
w ten sposób Nie, zwracany typ nie jest częścią podpisu metody.
źródło
W języku JAVA i wielu innych językach można wywołać metodę bez zmiennej, aby przechowywać zwracaną wartość. Jeśli typ zwracany jest częścią sygnatury metody, nie ma sposobu, aby dowiedzieć się, która metoda zostanie wywołana podczas wywoływania bez określenia zmiennej przechowującej wartość zwracaną.
źródło
Bracie, w javie używamy do wywoływania metod według ich nazwy i parametrów tylko po to, aby użyć ich w naszym kodzie, np
myMethod (20; 40)
więc JAVA wyszukuje tylko podobne rzeczy pasujące do odpowiedniej deklaracji (nazwa + parametr), dlatego podpis metody zawiera tylko nazwę metody i parametry. :)
źródło
Podpis metody to tylko nazwa i lista parametrów.
źródło
nie, w Javie sygnatura metody nie zawiera zwracanego typu, ale deklaracja zawiera.
zredagowano na podstawie poniższych opinii :)
źródło
String method( String s )
iDouble method( String s )
w tej samej klasie, na przykład.method signature
zmethod declaration
Zwracany typ nie jest uwzględniany w sygnaturze metody, tylko nazwa metody i parametry są zdefiniowane jako sygnatura metody.
Reffer: Oracle Docs ' Defining Methods'
źródło
Używając AspectJ (org.aspectj.lang.reflect.MethodSignature), ma zwracany typ
źródło
PODPIS METODY ZAWIERA TYP ZWROTU.
Kompilator ignoruje go, gdy musi sprawdzić, czy nie ma duplikatów. W Javie niedozwolone jest posiadanie dwóch metod z podpisem różniącym się tylko typem zwracanym.
Spróbuj tego:
Zbuduj projekt, przejdź do katalogu bin, skopiuj gdzieś plik Caller.cass . Następnie zmień wywołaną metodę:
Zbuduj projekt, zobaczysz, że zarówno Called.class, jak i Caller.class mają nowy znacznik czasu. Zastąp plik Caller.class powyżej i uruchom projekt. Będziesz miał wyjątek:
źródło
Podpis metody to tylko nazwa metody i parametry. Ale wierzę, że twój przykład wygeneruje błąd, jeśli będą w tej samej klasie. Możesz po prostu przetestować to na dowolnym IDE i zobaczyć, że kompilator zgłosi błąd
źródło
Jeśli spróbujesz uruchomić kod, o którym wspomniałeś na eclipse, będziesz miał odpowiedź na pytanie, jakie elementy kompilator java szuka dla rozróżnienia między metodami java:
Zgłoszony błąd to: Zduplikowana metoda myMethod (int) w typie Foo.
źródło