有一个包含30多个成员变量的类,需要将它传递给函数,然后在处理后从函数返回它。但是这个函数只接受基本数据类型,比如string,int。 我想将这些成员变量转换为对象数组,将其传递给函数,然后转换回来。
有一种简单的方法可以做到这些,除了转换一个一个?
像这样的源代码:class A{
int member1;
string member2;
int member3;
//other member variables
A(){
//source code
}
A(Object[] objs){
//assign objects in "objs" array to member variables
}
Object[] asArray(){
//put member variables into a object array
}
};
class B extends SuperB{
//can't modify SuperB, only can inherit it
//only accept fundamental data types, such as string, int
public Object[] run(Object... args){
A a = new A(args);
//processing
return a.asArray();
}
}
public static void main(String[] args){
A a = new A();
//other source code
Processor p = new Processor();
object[] updatedObjs = b.call("B", a.asArray());
a = new A(updatedObjs);
//other source code
};
答案 0 :(得分:1)
要做你想要的事情,你需要做一些java反思。遍历所有字段并将它们添加到数组中。
如果您不确定什么是java反射:
http://docs.oracle.com/javase/tutorial/reflect/
否则,如果你不想通过自己的东西来解决问题,你可以使用非常强大和流行的常见beanutils
http://commons.apache.org/proper/commons-beanutils/
如果你使用dynabean功能,你可以用几行代码完成所有这些:
WrapDynaBean wrapDynaBean=new WrapDynaBean(new A());
DynaProperty[] dynaProperties = wrapDynaBean.getDynaClass().getDynaProperties();
List<Object> objects=new ArrayList<>();
for (DynaProperty dynaProperty : dynaProperties) {
System.out.println(dynaProperty.getName()+" = "+wrapDynaBean.get(dynaProperty.getName()));
objects.add(wrapDynaBean.get(dynaProperty.getName()));
}
Object[] theArrayYouWant=objects.toArray(new Object[objects.size()]);