Die folgende Code druckt "String"Warum und wie kompiliert sich dieser Java-Code?
public class Riddle {
public static void main(String[] args) {
hello(null);
}
public static void hello(Object o) {
System.out.println("Object");
}
public static void hello(String s) {
System.out.println("String");
}
}
Warum dieser Code kompilieren? Ist nicht Null mehrdeutig?
Zum Beispiel wird der folgende Code nicht kompiliert wegen einer mehrdeutigen Signatur.
Kann jemand bitte erklären, warum das erste Beispiel kompilieren kann, ohne mehrdeutige Fehler zu haben?
Die Null ist nur ein Parameter. Im zweiten Fall kann die Methodensignatur "Objekt" nicht gegen die anderen beiden aufgelöst werden. –
Herzlichen Glückwunsch, ich glaube, Sie haben eines der wirklichen Löcher in Javas Typentheorie gefunden. Im Allgemeinen ist "Null" eine seltsame Kreatur zum Eintippen von Systemen. Wenn Sie daran interessiert sind, können Sie den Optionstyp, den einige Sprachen verwenden, ausprobieren ... Ich persönlich finde, dass es ein wirklich gutes Feature ist und ich wünschte, es wäre nicht zu spät, es in Java zu bringen. –
Siehe auch http://stackoverflow.com/questions/2608394/how-isambiguity-in-selecting-from-overloaded-methods-resolved-in-java oder auch http://stackoverflow.com/questions/1545501/ which-overload-wird-für-null-in-java ausgewählt – Philipp