Java-Problem mit var-args und Boxen

8

Ich habe eine Frage zu folgendem Code-Snippet:

%Vor%

Der erste Aufruf von wide_vararg kann nicht kompiliert werden (die Methode ist nicht eindeutig), während die zweite kompiliert.

Irgendwelche Erklärungen zu diesem Verhalten? Danke!

    
Ariel Chelsău 02.10.2011, 18:56
quelle

2 Antworten

1

Wenn eine var-arg-Methode aufgerufen wird, werden die Parameter zur Kompilierzeit in ein Array dieses Typs konvertiert.

Beim ersten Aufruf werden die Parameter in einen int [] konvertiert. Da alle Arrays in Java direkte Untertypen der Object-Klasse sind, gilt das Konzept der primitiven Erweiterung nicht. In diesem Fall werden beide Überladungen gleichermaßen anwendbar, da long [] und Integer [] auf derselben Ebene liegen. Daher die Mehrdeutigkeit

    
Sanjay Bhavnani 08.10.2011, 21:21
quelle
10

Der erste Aufruf von wide_vararg ist mehrdeutig, weil der Compiler entweder :

könnte
  • Erweitern Sie die int s auf long s, und rufen Sie die erste wide_vararg -Methode auf, oder
  • autobox die int s zu Integer s, und rufen Sie die zweite wide_vararg .
  • auf

Es weiß jedoch nicht, was sollte , so dass es den mehrdeutigen Methodenaufruf nicht kompiliert. Wenn Sie möchten, dass der erste Aufruf kompiliert wird, deklarieren Sie i als Integer oder long , nicht als int .

    
Matt Ball 02.10.2011 19:00
quelle

Tags und Links