У меня этот код. Почему это не работает? (Рабочий смысл, который он отображает 3) Как я могу это исправить?java access Integer конструктор через отражение
public class Main {
public static<V> V copy(V var){
try{
return (V) var.getClass().getConstructor(var.getClass()).newInstance(var);
}
catch(Exception e){
System.out.println("Copy faield " + e.getMessage() + " ");
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
Integer a = new Integer(3);
Integer b = copy(a);
System.out.println(a);
System.out.println(b);
}
}
Это выход:
Copy faield java.lang.Integer.<init>(java.lang.Integer)
java.lang.NoSuchMethodException: java.lang.Integer.<init>(java.lang.Integer)
at java.lang.Class.getConstructor0(Class.java:2818)
at java.lang.Class.getConstructor(Class.java:1723)
at Main.copy(Main.java:7)
at Main.main(Main.java:19)
3
null
Спасибо!
Integer имеет только '' int' или String' аргумент конструктора, не 'Integer' не конструктор копирования , При отражении вы не можете автоматически распаковывать параметры. –
Тогда почему это работает Integer c = new Integer (новое целое число (5)); – yonutix
Здесь вы делаете много предположений в общем методе. Не все классы будут иметь конструктор, который принимает значение одного и того же класса. – mikea