私はこのコードを持っています。なぜそれは機能しないのですか?(それが表示する作業の意味3)どうすれば修正できますか?javaアクセスリフレクションを通して整数コンストラクタ
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.class
int.class
整数のコンストラクタは、int
パラメータを取り、ないInteger
:
多くのfonctionでオブジェクトとしてラッパー(クラス)が使用int型であります。反射では、パラメータを自動的に解除することはできません。 –
これはなぜ動作しますか?Integer c = new Integer(new Integer(5)); – yonutix
ここでは一般的な方法で多くの仮定をしています。すべてのクラスが同じクラスの値をとるコンストラクタを持つわけではありません。 – mikea