altitdb
#1
Bom galera,
eu preciso copiar os atributos de um objeto para outro, vou demonstrar como quero.
class A {
String a;
}
class B {
String a;
String b;
}
Copiar os atributos da classe B para a classe A, certo, posso perder o atributo b, não tem problema é isso que quero.
Não posso fazer assim pois tenho bastante classes e seria bem trabalhoso.
A a = new A();
B b = new B();
a.setA(b.getA());
Fico no aguardo.
Obrigado desde já.
xD~~
procure por Apache BeanUtils
Faz por reflection. Vc consegue uma solução boa por ele.
É, com reflection dá pra fazer de boa mesmo. Eu fiz um pedaço, saca só:
package tests.java.reflection;
import java.lang.reflect.Field;
public class ReflectionUtil {
public static Object copyAttributesFromTo(Object a, Object b) throws IllegalArgumentException, IllegalAccessException {
Field[] fieldsFromFirstClass = a.getClass().getDeclaredFields();
Field[] fieldsFromSecondClass = b.getClass().getDeclaredFields();
for (Field currentFieldFromTheFirstClass : fieldsFromFirstClass) {
for (Field currentFieldFromTheSecondClass : fieldsFromSecondClass) {
String nameOfTheFirstField = currentFieldFromTheFirstClass.getName();
String nameOfTheSecondField = currentFieldFromTheSecondClass.getName();
if (nameOfTheFirstField.equals(nameOfTheSecondField)) {
currentFieldFromTheFirstClass.setAccessible(true);
currentFieldFromTheSecondClass.setAccessible(true);
currentFieldFromTheFirstClass.set(a, currentFieldFromTheSecondClass.get(b));
}
}
}
return a;
}
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
A a = new A();
a.setFirst("1st");
B b = new B();
b.setFirst("first");
b.setSecond("second");
A newA = (A) ReflectionUtil.copyAttributesFromTo(a, b);
System.out.println("should be first: " + newA.getFirst());
}
}
Desconsidere a OO nesse caso.
[quote=altitdb]Andre Brito
Valeuu Pelo codigo!!
xD~~[/quote]
Cara, não se esqueça que é só um exemplo… Tem que melhorar muito o código.
altitdb
#7
[quote=Andre Brito][quote=altitdb]Andre Brito
Valeuu Pelo codigo!!
xD~~[/quote]
Cara, não se esqueça que é só um exemplo… Tem que melhorar muito o código.[/quote]
Pode deixar…
Foi bom que eu estudei um pouco sobre Reflection!
xD~~