Chociaż robiłem kilka tras do testowania kodu w tym thread znalazłem się dziwne rzeczy, Jeśli wziąć pod uwagę następujący programJava metoda przeciążenie - dwuznaczność
import java.util.ArrayList;
import java.util.List;
public class OverloadTest {
public String test1(List l){
return "abc";
}
public int test1(List<Integer> l){
return 1;
}
public static void main(String [] args) {
List l = new ArrayList();
System.out.println(new OverloadTest().test1(l));
}
}
Spodziewałem kompilatora Java, aby pokazać dwuznaczność error ze względu na właściwość Errors kodu bajta, ale tak się nie stało. Teraz, gdy próbowałem uruchomić ten kod, spodziewałem się, że test1(List)
zostanie wywołana, a wyjście będzie "abc"
ale ku mojemu zaskoczeniu to nazywa test1(List<Integer>)
(wyjście było 1
)
Próbowałem nawet jak poniżej
List l = new ArrayList();
l.add("a");
System.out.println(new OverloadTest().test1(l));
Ale jeszcze znaleźć Java wywołanie test1(List<Integer> param)
sposób i kiedy obejrzał param
miał "a" String
(jak zrobił Java cast List<String>
do List<Integer>
?)
Podany przeze mnie kod nie jest dla mnie kompilowany - pojawia się błąd: 'error: nazwa clash: test1 (lista) i test1 (lista) mają to samo usunięcie' –
To samo w struktury danych na szablonach java są powiązane, więc nie powinno się ich kompilować, jednak jeśli użyjesz C++ coś podobnego do tego może się skompilować jako klasa szablonowa, nie udostępniaj niczego – aaronman
Mam kod zgodny w Eclipse Indigo, Java 1.6.0_30 – sanbhat