Die Methode ist zweideutig, für die Typ Fehler

Ich versuche zu verstehen, wie das Überladen in JAVA arbeitet, und versuchen, zu begreifen, von verschiedenen überlastung Regeln, die angewendet werden, im Fall von Erweiterung, autoboxing und varargs in JAVA. Ich bin nicht in der Lage zu verstehen, was passiert ist in das folgende Szenario:

 package package1;

 public class JustAClass {
     public static void add(int a, long b) {
         System.out.println("all primitives");
     }

   //public static void add(Integer a, long b) {
   //    System.out.println("Wraper int, primitive long");
   //}

     public static void add(int a, Long b) {
         System.out.println("Primitive int, Wrapper long");
     }

     public static void add(Integer a, Long b){
         System.out.println("All wrapper");
     }

     public static void main(String[] args) {
        int a = 10;
        Integer b = 10;
        long c = 9;
        Long d = 9l;

        add(a,c);
        add(a,d);
        add(b,c);
        add(b,d);
 }

}

An dieser Stelle, bekomme ich einen Kompilierungsfehler bei der Dritten Anrufung der add Methode sagen The method is ambiguous for the type Error .
Warum ist das so? Was sind die Regeln zur Bestimmung der Aufruf der Methode arbeiten? Was ist da genau passiert im folgenden Fall?
Ich fühle, dass fourth überladene add-Methode funktionieren sollte. Bitte helfen Sie mir zu verstehen, das Konzept hinter dieser.

  • Die Regeln sind in der Sprache Java-Spezifikationen, und Sie sind extrem langwierig und Komplex. Erinnern Sie grundsätzlich unmöglich ist, und dies ist, warum Sie sollten nie, nie schreiben Sie code wie den oben genannten, weil Sie fast sicher sein kann, einzuführen bugs. Ich respektiere Ihren Wunsch zu verstehen, aber um das zu tun, sollten Sie Lesen Sie die JLS: docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12
  • Ich denke, die Frage ist völlig legitim. Sie können lernen, die Spezifikation von Sie zu zerbrechen und zu verstehen, warum es bricht, dann wird es nie wieder tun.
InformationsquelleAutor neerajdorle | 2016-01-01
Schreibe einen Kommentar