我有2个不同的类,不同的字段和一个包含两个类的所有字段的类。有没有办法将对象转换为两个单独的对象?
a = '87101108991111091013211611132112121116104111110'
data = map(int, filter(None, re.split("([3-9][0-9]|1[0-2][0-9])", a)))
''.join(chr(i) for i in data)
#=>'Welcome to python'
如果对象class A{
private int a;
private int b;
}
class B{
private int a;
private int b;
}
具有A和B类的所有属性,有没有办法单独转换它们?
答案 0 :(得分:5)
从孩子到父母的投射(向下投射)或反之亦然(向上投射):
class A extends B
B b = (B)(new A());
或在接口的情况下:
List<String> myList = new ArrayList<>();
ArrayList<String> myArrayList = (ArrayList)myList;
施法时要小心 - 如果无法施法,你会收到Exception
!
在您的情况下,映射是您正在寻找的。你只需要一个映射器。
例如:
public class AToBMapper {
public static A fromB(B b) {
A a = new A();
a.setA(b.getA());
a.setB(b.getB());
return a;
}
public static B fromA(A a) {
//fill in
}
}
答案 1 :(得分:3)
作为xenteros非常好的答案的补充,如果您必须为许多课程重复此任务,您也可以使用库来执行此操作。
Spring,apache-commons和许多其他提供实用程序类来按字段复制字段,其中一个在两个类之间具有相同的名称和类型:
例如ModelMapper
:
ModelMapper mapper = new ModelMapper();
A a = new A(....);
B b = mapper.map(a, B.class)
一些库非常有效(Selma,MapStruct,JMapper)。他们中的大多数在编译时生成代码
其他人效率较低。
在推广使用这种库之前,你应该评估这一点,要映射的对象的大小和映射频率。