我想将超类对象getter复制到子类对象setter。但是我怎么能这么做呢。我正在寻找像克隆这样的东西。你能帮我找到它吗?
非常感谢。
一个简单的代码:
超级班:
public class SuperClass1{
private String name;
private String surname;
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public void setSurname(String surname){
this.surname=surname;
}
public String getSurname(){
return this.surname;
}
}
子类
public class SubClass1 extends SuperClass1{
private float gpa;
public void setGpa(float gpa){
this.gpa=gpa;
}
public float getGpa(){
return gpa;
}
}
和来电者班:
public class CallerClass1{
public static void main(String[] args){
SuperClass1 super1=new SuperClass1();
SubClass1 subclass1=new SubClass1();
//How to subclass1 object values easily taken from super1
}
}
}
答案 0 :(得分:6)
如果此处的性能不是问题,您可以使用反射将所有属性从一个类复制到另一个类。
检查此链接以解释如何执行此问题:
Copy all values from fields in one class to another through reflection
这个其他链接将为您提供代码,而不使用BeanUtils:
http://blog.lexique-du-net.com/index.php?post/2010/04/08/Simple-properties-Mapper-by-reflection
我总是在我的项目中使用这种功能。真有用。
答案 1 :(得分:0)
如果有特殊的库,请不要使用自己的代码。我使用modelMapper
(http://modelmapper.org/)。
public class AppsUtil {
private static ModelMapper mapper = new ModelMapper();
public static ModelMapper getMapper() {
return mapper;
}
static {
// full matching of names in classes
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
}
然后在子类的构造函数中使用AppsUtil
:
@Getter
public class AppsEmailException extends AppsException {
/**
* email, на который не отправилось сообщение
*/
private String email;
public AppsEmailException(AppsException baseClass, String email) {
AppsUtil.getMapper().map(baseClass, this);
this.email = email;
}
}