Il codice seguente stampa "String"Perché e come viene compilato questo codice Java?
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");
}
}
Perché quel codice compilare? Non è nullo ambiguo?
Ad esempio, il seguente codice NON verrà compilato a causa di una firma ambigua.
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(Integer o) {
System.out.println("Integer");
}
public static void hello(String s) {
System.out.println("String");
}
}
Qualcuno può spiegare perché il primo esempio può essere compilato senza errori ambigui?
Il valore "null" è solo un parametro. Nel secondo caso, la firma del metodo 'Object' non può essere risolta con gli altri due. –
Congratulazioni, penso che tu abbia trovato uno dei veri buchi nella teoria dei tipi di Java. In generale, "Null" è una specie di strana creatura per digitare i sistemi. Se sei interessato a questo, potresti controllare il tipo di opzione che alcune lingue usano ... Personalmente ritengo che sia una funzionalità davvero buona e vorrei che non fosse troppo tardi per portarlo in Java. –
Vedere anche http://stackoverflow.com/questions/2608394/how-is-ambiguity-in-selecting-from-overloaded-methods-resolved-in-java o anche http://stackoverflow.com/questions/1545501/ che-sovraccarico si-get-selezionata-per-nullo-in-java – Philipp