考虑一下我有一个像下面这样的课程。

public class SuperClass
{
  private String a;
  private String b;
  //getter/setters
}


和一个子类

public class ChildClass extends SuperClass
    {
      private String c;
      private String d;
      //getter/setters
    }


在另一个类中,我有一个ChildClass对象。该对象具有填充了数据的父类和子类成员变量。使用此对象,我需要获取父类的实例,即仅在父类中具有变量的对象(即a和b)。我该如何实现?

最佳答案

让我们退后一步,了解创建ChildClass实例时会发生什么。将创建一个存储位置来存储ChildClassSuperClass的字段。现在,您不能使该内存位置“忘记” ChildClass字段,而仅保留SuperClass字段。最好的办法是将ChildClass字段设置为null

因此,要做您想做的事情,您将创建一个新对象。您可以使用以下方法来做到这一点:

public class ChildClass extends SuperClass {
    private String c;
    private String d;

    public SuperClass getSuperClassInstance() {
        SuperClass sc = new SuperClass();
        sc.a = this.a; //or use getters/setters
        sc.b = this.b; //you might need to deep clone objects
        return sc;
    }
}


正如@ruakh所说,仅强制转换为SuperClass是不够的,因为只要指向同一内存位置,就可以通过将数据强制转换回ChildClass来检索数据。

根据评论更新

所以这是一个XY problem

您可以通过@JsonIgnore注释子类中的字段,也可以使用@JsonIgnoreProperties(value = { "c", "d" })在类级别上对其进行注释。

另外,this duplicate question中的答案也有帮助。

如果在其他情况下需要序列化这些字段,则可以使用JSON Views

关于java - Java:从子类获取父类(super class)的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54701047/

10-09 02:13