Java将子类转换为父类

时间:2014-08-13 12:43:28

标签: java

考虑以下代码:

public class PublicInformation
{
    public String username;
    public String status;
}

public class PrivateInformation extends PublicInformation
{
    public String somePrivateInformation;
}

我有一个PrivateInformation对象,我希望将其发送到流中,而不是PrivateInformation的值。所以我想将它转换为PublicInformation对象。

我该怎么做?是将它投射到PublicInformation对象并通过足够的流发送它?

3 个答案:

答案 0 :(得分:1)

创建一个将PrivateInformation转换为PublicInformation的函数,然后发送它:

public class PublicInformation
{
    public String username;
    public String status;
}

public class PrivateInformation extends PublicInformation
{
    public String somePrivateInformation;

    public PublicInformation prepareToSend(){
        return new PublicInformation(){username = this.username, status = this.status};
    }
}

然后你可以致电PrivateInformation.prepareToSend()来存储它

答案 1 :(得分:0)

取决于您的信息流的位置。如果它是由您控制的流,只需传递该对象即可。如果它是一个不受控制的流,则必须删除所有不必要的数据。

我看到两个解决方案:

PrivateInformation privateInfo = new PrivateInformation();
...
privateInfo.setSomePrivateInformation(null);
...

或您编写自己的转换器

public interface Converter<T, S>{
    public <S> convert(T src, S target)
}


public MyConverter implements Converter<PrivateInfo, PublicInfo> {
    public <S> convert(T src, S target) {
        PublicInfo tmp = new PublicInfo();
        tmp.setA(target.getA());
        tmp.setB(target.getB());

        return tmp;
    }
}

答案 2 :(得分:0)

PublicInformation实施一个cunstructor,它将PublicInformation的实例作为参数。

public PublicInformation(PublicInformation other) {
  this.username = other.getUsername();
  this.status = other.getStatus();
}

然后使用PrivateInformation

的实例调用此构造函数
PrivateInformation privateInformation = new PrivateInformation();
// set username, status, and somePrivateInformation

PublicInformation publicInformation = new PublicInformation(privateInformation);

生成的publicInfromation将是您想要的。

相关问题