Eaê, galera!
Criei um método que extrai dados de uma tabela de strings e gera uma lista de objetos, usando reflexão. O problema é que, até o momento, meu método retorna uma lista de Object, queria saber se é possível que ele retorne uma lista do tipo passado como parâmetro diretamente. Segue meu código abaixo.
Obrigado pela ajuda!
protected List<Object> getObjectsFromTable(
List<List<String>> table,
Class<?> type,
String[] fields_names,
Class<?>[] fields_types)
throws Throwable {
/* Pega os setters do objeto. */
Method[] methods = new Method[fields_names.length];
for (int i = 0; i < fields_names.length; i++) {
String field_name = fields_names[i];
String method_name = "set" + Character.toUpperCase(field_name.charAt(0)) +
field_name.substring(1);
methods[i] = type.getMethod(method_name, new Class<?>[]{fields_types[i]});
}
List<Object> result = new ArrayList<Object>();
/* Percorre as linhas da tabela. */
ListIterator<List<String>> i = table.listIterator();
while (i.hasNext()) {
/* Nova instância do objeto. */
Object aux = type.newInstance();
/* Pega os campos da linha atual. */
List<String> campos = i.next();
ListIterator<String> j = campos.listIterator();
for (int index = 0; index < fields_names.length; index++) {
String campo = j.next().toUpperCase();
Class<?> tipo = fields_types[index];
if (tipo == String.class) {
methods[index].invoke(aux, campo);
} else if (tipo == long.class) {
methods[index].invoke(aux, Long.parseLong(campo));
} else if (tipo == int.class) {
methods[index].invoke(aux, Integer.parseInt(campo));
} else {
throw new IllegalArgumentException("Invalid type!");
}
}
result.add(aux);
}
return result;
}