Я немного запутался в этом коде, это тест, чтобы понять параметрический класс.Параметрический класс в Java
У меня есть 2 класса, один из них является основным, а другой - параметрическим. Когда я создаю новый Object с Integer как параметр, и я думаю, что в конструкторе будет вызван метод print (Integer x), но это не так, вместо этого java вызовет метод print (Object o).
Кто-то из вас знает, почему это произошло?
package classi.parametriche;
public class Contenitore <E> {
public E variabile;
public Contenitore(E value){
variabile = value;
System.out.println("Variabilie : "+variabile.getClass().toString());
System.out.println("Variabile : "+value.getClass().toString());
println(variabile);
}
public void println(String s){
System.out.println("Stringa : "+ s);
}
public void println(Integer x){
System.out.println("Int : " + x);
}
public void println(short x){
System.out.println("short : " + x);
}
public void println(byte x){
System.out.println("byte : " + x);
}
public void println(long x){
System.out.println("long : " + x);
}
public void println(char x){
System.out.println("char : " + x);
}
public void println(float x){
System.out.println("float : " + x);
}
public void println(double x){
System.out.println("double : " + x);
}
public void println(Object o){
if (o != null){
System.out.println("Object : " + o.toString());
}else{
System.out.println("null");
}
}
}
public class ClassiParametriche {
public static void main(String[] args) {
Contenitore<Integer> c = new Contenitore <Integer>(42);
}
}
это результат:
run:
Variabilie : class java.lang.Integer
Variabile : class java.lang.Integer
Object : 42
Возможная дубликация [Перегрузка на Java и множественная отправка] (http://stackoverflow.com/questions/9759141/overloading-in-java-and-multiple-dispatch) – Smutje
Средства Generic доступны только для компиляции. После того как код Java скомпилирован в .class-файл, общие свойства, например параметры для класса, стираются, то есть во время выполнения у вас есть только объект. – vvtx
Посмотрите на стирание стилей. Общий «E» известен только как «Object» во время выполнения. –