Mam ten kod. Dlaczego to nie działa? (Działające znaczenie, które wyświetla 3) Jak mogę to naprawić?java dostęp Integer konstruktor przez odbicie
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);
}
}
To wyjście:
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
Dzięki!
Integer ma tylko '' String' int' lub argumentów konstruktorów, nie 'Integer' Konstruktor kopiujący . Dzięki odbiciu nie można automatycznie rozpakować parametrów. –
Dlaczego więc działa Integer c = new Integer (new Integer (5)); – yonutix
Podejmujesz tutaj wiele założeń w ogólnej metodzie. Nie wszystkie klasy będą miały konstruktor, który przyjmuje wartość tej samej klasy. – mikea