簡體   English   中英

將Java類中的成員變量轉換為對象數組,反之亦然

[英]converting member variables in a Java class to an object array and vice versa

有一個包含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
 };

要執行您要求的操作,您需要做一點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()]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM