Я пытаюсь перебрать множество ArrayLists пользовательских классов с одним и тем же кодом, и подумал, что с помощью отражения это будет проще.Я сталкиваюсь с проблемой, когда пытаюсь получить ссылку на каждое поле.Вот небольшое представление кода, который я пытаюсь запустить.(мой код отличается, но основы есть):
import java.lang.reflect.*;
import java.util.ArrayList;
public class Stack {
public ArrayList<Custom1> cust11;
public ArrayList<Custom1> cust12;
public ArrayList<Custom1> cust13;
public ArrayList<Custom2> cust21;
public ArrayList<Custom2> cust22;
public ArrayList<Custom2> cust23;
public static void main(String args[]) {
Stack stack = new Stack();
}
public Stack() {
cust11 = new ArrayList<Custom1>();
cust12 = new ArrayList<Custom1>();
cust13 = new ArrayList<Custom1>();
cust21 = new ArrayList<Custom2>();
cust22 = new ArrayList<Custom2>();
cust23 = new ArrayList<Custom2>();
doReflect();
}
public void doReflect(){
Field[] fields = this.getClass().getFields();
for(Field f : fields) {
if(f.getName().contains("cust1")) {
try {
ArrayList<Custom1> temp = (ArrayList<Custom1>)f.get(cust11);
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
}
class Custom1{
public Custom1() {}
}
class Custom2{
public Custom2() {}
}
Когда он достигает
ArrayList<Custom1> temp = (ArrayList<Custom1>)f.get(cust11);
Я получаю
java.lang.IllegalArgumentException: Can not set java.util.ArrayList field
Stack.cust11 to java.util.ArrayList
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(Unknown Source)
at java.lang.reflect.Field.get(Unknown Source)
at Stack.doReflect(Stack.java:33)
at Stack.<init>(Stack.java:25)
at Stack.main(Stack.java:14)
Как я могу это сделать