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

@Sarseth: w JVM sygnatura metody to return type + nazwa metody + parametry, przy kompilacji każda metoda jest tak zapisywana, np:
invoke... some/pack/Type setProp (Ljava/lang/Integer;)D
some/pack/Type - miejsce metody
double setProp(Integer i) - sygnatura

Więc wystarczy że cokolwiek się różni, jednak javac nie zezwala na stworzenie niektórych kombinacji, jednak nie oznacza to że one nie działają w runtime lub że nie można ich użyć... ale kieruje się jakimiś dziwnymi
  • Odpowiedz
@GotoFinal nie mam pojęcia, powinno się wywalić na kompilacji, ale jak jest to nie wiem, co mi przychodzi do głowy to albo można się do nich jakiś odwołać osobno albo ten Object [] to tablica wartości funkcji o tej samej sygnaturze
  • Odpowiedz
@GotoFinal: nie wiem o czym Ty mowisz, ale jakbym mial powiedziec, to w przypadku kiedy napiszesz String zmienna = costam.doSomething() to wywola sie metoda ktora zwraca stringa, w reszcie typu object, analogicznie jak dasz int double to w zaleznosci od zmien ej.
  • Odpowiedz
@GotoFinal:

The compiler does not consider return type when differentiating methods, so you cannot declare two methods with the same signature even if they have a different return type.
  • Odpowiedz
@Masuq0: huh, no ale taki kod może istnieć w JVM, czemu zastanawiasz się nad kodem który już jest skompliowany, w nie ważne jaki sposób? pytanie jest niżej, co kiedy tego użyjemy.
(PS: używając kotlina da się stworzyć 2 metody z innym return type)
  • Odpowiedz
@GotoFinal: Zapodaj linka jeśli możesz do takiej skompilowanej klasy która ma podobne metody (PS: masz jakiś przykład jak wygląda bytecode po skompilowaniu w kotlinie?)
  • Odpowiedz