考虑以下代码:
public class PublicInformation
{
public String username;
public String status;
}
public class PrivateInformation extends PublicInformation
{
public String somePrivateInformation;
}
我有一个PrivateInformation
对象,我希望将其发送到流中,而不是PrivateInformation
的值。所以我想将它转换为PublicInformation
对象。
我该怎么做?是将它投射到PublicInformation
对象并通过足够的流发送它?
答案 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
将是您想要的。