63274682374
63274682374
public static void main(String[] args) {
try {
throw new IOException();
} catch (Error | Exception ex) {
handle(ex);
}
}

public static void handle(Exception ex) {
System.out.println("exception");
}

public static void handle(IOException ex) {
System.out.println("ioexception");
}

public static void handle(Throwable t) {
System.out.println("throwable");
}

#java #javapuzzle

Co wypisze

  • Błąd kompilacji 19.4% (7)
  • exception 27.8% (10)
  • ioexception 27.8% (10)
  • throwable 25.0% (9)

36 głosów

  • Najlepsze
  • Wszystkie komentarze
63274682374
63274682374
63274682374 Autor
3
@Mike-Wazowski: W multi-catch czyli tam gdzie podajemy w klauzuli catch więcej niż jeden typ wyjątku oddzielony znakiem | zmienna wyjątku jest typu, który jest najbliższą w hierarchii klasą bazową wspólną dla wszystkich wskazanych tam typów. Dla przykładu z ankiety dla Error i Exception najbliższą klasą bazową jest Throwable czyli ex jest referencją typu Throwable.
Dalej mamy przeładowaną metodę handle i w grę wchodzi dopasowanie przeładowanej wersji metody do wywołania.
63274682374
63274682374
63274682374 Autor
1
@sorhu: Przyjmijmy, że całość znajduje się w odpowiedniej klasie i wszystkie niezbędne importy zostały dodane.
sorhu
sorhu
0
@63274682374 Ha! Znam odpowiedź.

sorhu
sorhu
0
@63274682374
(✌ ゚ ∀ ゚)☞

No to też znam odpowiedź, ale nie powiem.
GotoFinal
@63274682374: aż mnie ciekawi czy osoby które głosują na IO kiedykolwiek pisały w javie o.O a o dziwo sporo ich
GotoFinal
@interface: ale te języki też mają resolve metody na etapie kompilacji. W groovy o ile dobrze kojarzę to by działało w taki sposób.
63274682374
63274682374
63274682374 Autor
0
@GotoFinal: Myślę, że początkujący nie czują do końca polimorfizmu, kiedy i gdzie ma on zastosowanie.
Bruno_
@63274682374 dasz odp?

63274682374
63274682374
63274682374 Autor
0
@Bruno_:

Mike-Wazowski
Mike-Wazowski
@63274682374: możesz wytłumaczyć dlaczego tak?