Wpis z mikrobloga

#java #programowanie
Huh, drobna zagadka bo jakoś natrafiłem na taki ciekawszy przypadek, mamy bibliotekę z takimi metodami w jednej klasie:

Object[] doSomething()
String doSomething();

Używamy tego w naszym kodzie i robimy costam.doSomething(), jak to się skompiluje?
A jak to się skompiluje jeśli zamiast Object/String będzie tam np int i double?

  • 31
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@afe1: @Masuq0: @AwizisieAkat: @Ewentualnie: @Sarseth:
javac w obu przypadkach skompiluje ten kod i wybierze pierwszą metodę z pliku.
eclipse... z obiektami sobie radzi, ale jak jedna z metod zwraca prymityw to wywali compile errora.

Większość IDE oba przypadki uważa za error, intellij dość ciekawie, bo w przypadku 2 metod double i int wybiera sobie losową metodą która myśli że się wykona (czyli
  • Odpowiedz
@GotoFinal: no wlasnie wynika z linku ze ma. Ten kod ktory widzisz po dekompilacji biblioteki to nie to co uruchamiane jest na dalviku.

the entire signature is being used including the function name, the argument types and the return type!
  • Odpowiedz
@GotoFinal: czym skompilowana biblioteka? bo na pewno nie javac gdyz oraclowski kompilator sprawdza name+parameters. Kotlin jak widac name+parameters+return type, wiec jvm musi umiec rozrozniac te metody.
  • Odpowiedz
@afe1: no to wiem, ale nie o to jest tutaj pytanie, tylko jak zachowa się javac kiedy już chcemy tego użyć :D Bardziej spodziewałem się błędu o ambiguous call jak w innych przypadkach kiedy więcej niż 1 metoda pasuje. A tu jednak... wybiera pierwszą i co ważniejsze, nie widze by te zachowanie było gdzieś opisane, czyli tak wlasciwe to można potraktować jako undefined behavior jak @AwizisieAkat pisał. Chyba że
  • Odpowiedz
@GotoFinal: nie nie, ja pisalem o uwzglednieniu return type o czym wczesniej wspomniales :) klniknij na link do bloga i tam jest info ze dalvik bierze pod uwage return type
  • Odpowiedz