我有这段代码。为什么它不能工作?(“工作”意味着它应该显示3)。我该怎么修复它?
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
类型的拷贝构造函数。使用反射时,无法自动拆箱参数。 - Gábor Bakosint
的Class
,而是传递了Integer
的,因此它无法在运行时执行该操作。 - Gábor Bakos