【问题标题】:How to copy superclass object values to subclass object values?如何将超类对象值复制到子类对象值?
【发布时间】:2011-12-12 08:33:03
【问题描述】:

我想将超类对象获取器复制到子类对象设置器。但我怎么能轻松做到这一点。我正在寻找类似克隆的东西。你能帮我找到吗?

一个简单的代码:

超类:

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
  }
}

【问题讨论】:

  • 我不认为这个问题是坏问题。如果你有好的问题,你问我回答
  • 不投反对票。可能问题还不错,但提问的方式是..!
  • @Mudassir 可能是真的。但我想用更简单的词问这个问题,而不是无聊地阅读它。
  • 你能详细说明你想要达到的目标吗?你能展示部分代码来说明你的问题吗?
  • 所以你不想使用类继承,对吧?

标签: java


【解决方案1】:

如果性能不是这里的问题,您可以使用反射将所有属性从一个类复制到另一个类。

查看此链接到另一个解释如何操作的问题:

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

我总是在我的项目中使用这种功能。真的很有用。

【讨论】:

  • 非常感谢 :) 这就是我要找的
  • Jonathan,是否可以使用 BeanUtils 复制超类字段?
【解决方案2】:

当有特殊库时,不要使用您自己的代码。我用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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 2020-04-14
    • 2021-01-23
    • 2018-09-03
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多