2014-10-08 2 views
0

У меня есть следующий StuFFКак начать класс свойство динамически

String[] header1 = {"func", "name", "lrt"}; 
String[] value11 ={"f1", "n1", "0.1"}; 
String[] value12 ={"f2", "n2", "0.2"}; 
...... 

String[] header2 = {"name", "func", "lrt"}; 
String[] value21 ={"n3", "f3", "0.1"}; 
String[] value22 ={"n4", "f4", "0.2"}; 
...... 


class unit { 
    String func; 
    String name; 
    double lrt; 
} 

У меня есть более чем 1000 групп различных заголовков (и их прикрепленного значения), организованных в другом порядке.

Как я могу инициировать класс устройства с именем свойства, соответствующим различным заголовкам.

Заранее спасибо.

+0

Вы пытались использовать отражение? – ToYonos

+0

Кстати, значение 'String []21 = {" n3 "," f3 ", 0.1};' не будет работать, поскольку у вас есть значение 'double' в массиве' String'. –

+0

Звучит как подходящий пример использования для 'Map '. –

ответ

0

Я предлагаю использовать отражение для того, что на самом деле довольно легко:

unit u = new unit(); 
for(int i=0;i<;header1.lenght;i++) { 
    String h = header1[i]; 
    String v = value11[i]; 
    Field f = u.getClass().getDeclaredField(h); 
    f.set(u, v); 
} 

Очевидно, вам нужно больше инфраструктуры итерацию ваши данные кортежи ... value11, value12 и т.д.

0

HashMap будет лучше подход к вашей реализации:

Map<String[], ArrayList<Object[]>> unit = new HashMap<String[], ArrayList<Object[]>>(); 

String[] header1 = {"func", "name", "lrt"}; 
Object[] value11 ={"f1", "n1", 0.1}; 
Object[] value12 ={"f2", "n2", 0.2}; 

String[] header2 = {"name", "func", "lrt"}; 
Object[] value21 ={"n3", "f3", 0.1}; 
Object[] value22 ={"n4", "f4", 0.2}; 

ArrayList<Object[]> values = new ArrayList<>(); 
values.add(value11); 
values.add(value12); 
unit.put(header1, values); 

values.clear(); 
values.add(value21); 
values.add(value22); 
unit.put(header1, values); 

Попробуйте это, и вы будете иметь unit объект, содержащий все значения.

Смежные вопросы