java两个实体类转化问题
其中一个类只比另一个类多一个属性,其他属性类型都一致,两个类继承于同一个父类,怎么把属性少的那个类转化成属性多的哪个类。(其实就是两个基本一样的数据表,其中一个比另一个多...
其中一个类只比另一个类多一个属性,其他属性类型都一致,两个类继承于同一个父类,怎么把属性少的那个类转化成属性多的哪个类。(其实就是两个基本一样的数据表,其中一个比另一个多一个字段,想把字段少的表中的数据放到字段多的那个里面)。目前我是把一个对象的属性一个一个set到另一个对象里=,=||40多个属性呢。。。笨死我得了
展开
6个回答
展开全部
假如
A 类 里有 2个属性 X 和 Y
B 类 里有 3个属性 X ,Y,Z
你的意思是 这2个类 唯一的区别是 B 比 A 多 一个属性 ,你想 批量的把A 的一个实例 转换成 B 的一个 实例 是这个意思吧。
你可以写一个处理类
写一个方法 接收一个A类对象 和多处来的属性 返回一个B类对象 ,麻烦就麻烦一次 以后直接调用 传里个A类 得到个B类 就可以直接用了
例如
public B setXYZ( A a, int z){
B b=new B();
b.setX(a.getX());
b.setY(a.getY());
b.setZ(z);
return b;
}
A 类 里有 2个属性 X 和 Y
B 类 里有 3个属性 X ,Y,Z
你的意思是 这2个类 唯一的区别是 B 比 A 多 一个属性 ,你想 批量的把A 的一个实例 转换成 B 的一个 实例 是这个意思吧。
你可以写一个处理类
写一个方法 接收一个A类对象 和多处来的属性 返回一个B类对象 ,麻烦就麻烦一次 以后直接调用 传里个A类 得到个B类 就可以直接用了
例如
public B setXYZ( A a, int z){
B b=new B();
b.setX(a.getX());
b.setY(a.getY());
b.setZ(z);
return b;
}
追问
嗯嗯~就是这个意思,我也是你说的写了一个方法,但是40多个属性也够麻烦的 所以来看看有没有更好的方法。有好办法多加分,没好办法加5分
追答
你查查eclipse 生成构造方法 的功能 我记得有个字段生成 你看看有没有接受 父类对象那种的构造方法 如果有你就省事了 直接 用构造方法 接受个A类对象创建B的对象
展开全部
你的意思是说A、B两个类继承C,A和B属性基本相同,但A比B多一个字段。然后把B的数据放到A中么?如果是这样,你可以把B作为A 的属性就可以把数据放到A中了.
class A{
private B b;
}
在A中提供B的get和set方法,就可以把B的数据放到A中了
class A{
private B b;
}
在A中提供B的get和set方法,就可以把B的数据放到A中了
追问
可是两个类都是公司自动生成的,不能手动改=,=||
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以利用反射来完成自动赋值,可以直接用下面这个方法。
public static <S, T> T mapper(S source, Class<T> target) {
Method[] sourceMethods = source.getClass().getMethods();
Method[] targetMethods = target.getMethods();
T t = null;
try {
t = target.newInstance();
for (Method sourceMethod : sourceMethods) {
String sourceMethodName = sourceMethod.getName();
if (sourceMethodName.startsWith("get")) {
Object result = sourceMethod.invoke(source);
for (Method targetMethod : targetMethods) {
String targetMethodName = targetMethod.getName();
if (targetMethodName.startsWith("set")
&& targetMethodName.substring(3, targetMethodName.length())
.equals(sourceMethodName.substring(3, sourceMethodName.length()))) {
targetMethod.invoke(t, result);
break;
}
}
}
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return t;
}
public static <S, T> T mapper(S source, Class<T> target) {
Method[] sourceMethods = source.getClass().getMethods();
Method[] targetMethods = target.getMethods();
T t = null;
try {
t = target.newInstance();
for (Method sourceMethod : sourceMethods) {
String sourceMethodName = sourceMethod.getName();
if (sourceMethodName.startsWith("get")) {
Object result = sourceMethod.invoke(source);
for (Method targetMethod : targetMethods) {
String targetMethodName = targetMethod.getName();
if (targetMethodName.startsWith("set")
&& targetMethodName.substring(3, targetMethodName.length())
.equals(sourceMethodName.substring(3, sourceMethodName.length()))) {
targetMethod.invoke(t, result);
break;
}
}
}
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return t;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没明白你说的啥意思
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
汗呀,你不知道java 有快捷的get set 方法吗?需要自己一个一个的写吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询