我希望将来自我的实体管理器的对象的转移属性值转换为新对象。
返回Object始终为null
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 (!Modifier.isFinal(currentFieldFromTheFirstClass.getModifiers())) {//Dispensa os Final
if (!currentFieldFromTheFirstClass.isAnnotationPresent(Id.class)) {//Não sobescreve campo id
if (nameOfTheFirstField.equals(nameOfTheSecondField)) {
currentFieldFromTheFirstClass.setAccessible(true);
currentFieldFromTheSecondClass.setAccessible(true);
currentFieldFromTheSecondClass.get(b));
currentFieldFromTheFirstClass.set(a, currentFieldFromTheSecondClass.get(b));
}
}
}
}
}
return a;
}
}
在Facade调用中,我总是要将所有属性值都放到新对象
public void update(Profile object) {
dao.beginTransaction();
Profile persistedObject = dao.find(object.getId());
persistedObject.setName(object.getName());
dao.commitAndCloseTransaction();
}
所以我想创建一些类似的东西
public void update(Profile object) {
dao.beginTransaction();
Profile persistedObject = dao.find(object.getId());
ReflectionUtil.copyAttributesFromTo(persistedObject , object);
dao.commitAndCloseTransaction();
}
答案 0 :(得分:1)
真的很想念你为什么使用2循环? ..如果类是相同的。你不需要这样做..只需要在1循环中进行..并使用字段获取obj,它持有数据..并使用set来设置..这里是更好的方法..如果需要相同的对象你可以使用泛型..并且需要相同的对象类型(请求返回类型)
from sys import argv
one, two, three = argv[1:]
print "My first number is ", one
print "My second number is ", two
print "My third number is ", three
答案 1 :(得分:0)
返回Object始终为null
返回对象(即a
包含的return
)不可能是null
。
很容易看出代码不会更改引用a
。方法中没有赋值,因此无法更改。
另一种可能性是您为null
调用了a
值的方法。但是,如果你这样做,方法的第一行会调用a.getClass()
,如果a
为null
,则会抛出NPE。
TL; DR - 这是不可能的。
那是什么意思?
以下是最可能的解释:
您错了正在返回null
。也许这个方法没有被调用?也许,它不会回归?
也许你以某种其他方式误解了证据。没有看到代码......和证据就很难知道。
也许你不是意味着该方法正在返回Object;即我误解了这个问题。 (你的问题描述非常明确,但是......)
答案 2 :(得分:0)
我对代码进行了更改,并努力为我更新
fgetcsv()
电话
public static Object copyAttributesFromTo(Object a, Object b) throws IllegalArgumentException, IllegalAccessException {
Field[] fieldsFromFirstClass = a.getClass().getDeclaredFields();
Field[] fieldsFromSecondClass = b.getClass().getDeclaredFields();
//JSFMessageUtil.addMsgLog(JSFMessageUtil.matricula, ReflectionUtil.class.getCanonicalName(), "ReflectionUtil: Aqui");
for (Field currentFieldFromTheFirstClass : fieldsFromFirstClass) {
for (Field currentFieldFromTheSecondClass : fieldsFromSecondClass) {
Object nameOfTheFirstField = currentFieldFromTheFirstClass.getName();
Object nameOfTheSecondField = currentFieldFromTheSecondClass.getName();
if (!Modifier.isFinal(currentFieldFromTheFirstClass.getModifiers())) {//Dispensa os Final
//if (!currentFieldFromTheFirstClass.isAnnotationPresent(Id.class)) {//Não sobescreve campo id
if (nameOfTheFirstField.equals(nameOfTheSecondField)) {
currentFieldFromTheFirstClass.setAccessible(true);
currentFieldFromTheSecondClass.setAccessible(true);
//JSFMessageUtil.addMsgLog(JSFMessageUtil.matricula, ReflectionUtil.class.getCanonicalName(), "ReflectionUtil: " + currentFieldFromTheSecondClass.get(b));
currentFieldFromTheFirstClass.set(a, currentFieldFromTheSecondClass.get(b));
}
//}
}
}
}
return a;
}