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!
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
Der erste Aufruf von wide_vararg
ist mehrdeutig, weil der Compiler entweder :
int
s auf long
s, und rufen Sie die erste wide_vararg
-Methode auf, oder
int
s zu Integer
s, und rufen Sie die zweite wide_vararg
. 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
.
Tags und Links java