2013-06-24 3 views
1

인스턴스 변수가 객체 배열로 변환되어야하는 몇 개의 pojos가 있습니다. 각 pojo에서 toObjectArray() 메서드를 추가하는 대신 동적으로 처리 할 수있는 방법을 찾으려고합니다.Java 인스턴스 변수의 객체 배열을 동적으로 생성합니다.

public class Contact { 

    private String lastName; 
    private String firstName; 

    public String getLastName() { 
    return lastName; 
    } 

    public void setLastName(String lastName) { 
    this.lastName = lastName; 
    } 

    public String getFirstName() { 
    return firstName; 
    } 

    public void setFirstName(String firstName) { 
    this.firstName = firstName; 
    } 

    public Object[] toObjectArray() { 
    return new Object[] { 
     this.getLastName(), 
     this.getFirstName(), 
    }; 
    } 

} 

인스턴스 변수가없는이 순서로 반환되는 : 여기

내가 제거하고 싶은 toObjectArray() 메서드를 사용하여 샘플 클래스입니다. 객체 배열에 대한 올바른 순서를 반영 할 수있는 사용자 정의 주석이 있습니다. 객체 배열을 생성하기 위해 객체의 인스턴스 변수와 값을 동적으로 반복 할 수 있는지 궁금합니다.

이런 식으로 뭔가 ...

public static Object[] toObjectArray(Object obj) { 
    /// cast Object to ? 
    /// iterate instance variables of Contact 
    /// create and return Object[] 
} 

public static void main(String[] args) { 
    Contact contact = new Contact(); 
    contact.setLastName("Garcia"); 
    contact.setFirstName("Jerry"); 

    Object[] obj = toObjectArray(contact); 
} 

어떤 도움을 크게 감상 할 수있다. 좀 더 명확해야 할 필요가 있으면 알려주십시오.

감사합니다.

+1

어쩌면 반사? –

답변

2

가능한 한 가지 방법은 리플렉션을 사용하는 것입니다.

static <T> Object[] getFieldValues(final Class<T> type, final T instance) { 

    final Field[] fields = type.getDeclaredFields(); // includes private fields 

    final Object[] values = new Object[fields.length]; 

    for (int i = 0; i < fields.length; i++) { 
     if (!fields[i].isAccessible()) { 
      fields[i].setAccessible(true); // enables private field accessing. 
     } 
     try { 
      values[i] = fields[i].get(instance); 
     } catch (IllegalAccessException iae) { 
      // @@? 
     } 
    } 

    return values; 
} 
+0

+1 당신의 대답은 내 것보다 더 완벽합니다 – fmodos

+0

이것은 완벽합니다, 고마워요! 나는 그 인스턴스가 그와 같은 리턴에 던져 질 수 있다는 것을 몰랐다 ... 매우 유용했다. 다시 한번 감사드립니다. – mmamane

0
//Creating dyanamic class object[dynamic array] size for Object. 

//Defining Testclass for creatring menu buttons 




public class TestClass extends AbstractAction{ 
     boolean literal; 
     public TestClass(String literal) { 
      super(literal); 
     } 
     public void actionPerformed(ActionEvent e) { 

     } 
    } 


    ArrayList<TestClass> ObjectArray= new ArrayList<TestClass>(); 


    //Here ObjectArray is defined as dynamic array class object. 

    //Insert new Class objects to the ObjectArray 

ObjectArray.add(new TestClass("Button1")) ; 
ObjectArray.add(new TestClass("Button2")) ; 
ObjectArray.add(new TestClass("Button3")) ; 

//Converting ArrayList object to ClassObject array 

TestClass testclassObject[]=ObjectArray.toArray(new [ObjectArray.size()]) 


//Using of Class object array 


for (TestClass subAction : testclassObject) { 

    if(subAction != null){ 
     JButton subButton = new JButton ((String)subAction.getValue(Action.NAME), null); 
     subButton.addActionListener(subAction); 

//Adding buttons to JPanel 

     JPanel buttonpanel= new JPanel();     
     buttonpanel.add(subButton); 
} 
} 
관련 문제