【问题标题】:Why doesn't JavaBeans serialize a property from type List<?>?为什么 JavaBeans 不序列化 List<?> 类型的属性?
【发布时间】:2011-11-17 11:30:51
【问题描述】:

我正在尝试使用 JavaBeans 进行一些简单的 XML 序列化,对象具有五个 getter/setter 属性和两个 getter。这两个来自 List<...> 类型:

public List<MasterDataQueryMDType> getType() {
    if (type == null) {
        type = new ArrayList<MasterDataQueryMDType>();
    }
    return this.type;
}

public List<MasterDataQueryKey> getKey() {
    if (key == null) {
        key = new ArrayList<MasterDataQueryKey>();
    }
    return this.key;
}

然后我使用 XMLEncoder 类(虽然这里 JAXB 可能更合适,但我现在保持简单)。生成的 XML 只有五个 getter/setter 属性,两个 List 类型的属性没有被编码。是因为它们是只读的,还是我必须为这些通用列表编写 PersistenceDelegate ?


好的,我已经研究了更多,而解决这个问题的最简单的方法就是创建一个包装类:

public class MasterDataQueryWrapper {
private MasterDataQuery query;

public MasterDataQuery getQuery(){
    return this.query;
}
public void setQuery(MasterDataQuery value){
    this.query = value;
}
public List<MasterDataQueryMDType> getType(){
    return query.getType();
}
public void setType(List<MasterDataQueryMDType> value){
    for (MasterDataQueryMDType t:value){
        this.query.getType().add(t);
    }
}
public List<MasterDataQueryKey> getKey(){
    return query.getKey();
}
public void setKey(List<MasterDataQueryKey> value){
    for (MasterDataQueryKey k:value){
        this.query.getKey().add(k);
    }
}
}

这样,java Beans 获取和设置只读属性没有问题。但是,如果您有更优雅的解决方案,请随时加入...

【问题讨论】:

  • 但是编码器抛出了一些小错误:java.lang.NullPointerException Continuing ... java.lang.InstantiationException: java.math.BigDecimal Continuing ... java.lang.RuntimeException: failed评估:=Class.new();继续... java.lang.InstantiationException: java.math.BigDecimal 继续... java.lang.RuntimeException: 评估失败:=Class.new();继续...
  • 您知道接口 List 本身不扩展可序列化吗?你的问题可能来自那里吗?另外:MasterDataQueryMDType 是否可序列化?
  • 是的,'MasterDataQueryMDType' 是可序列化的,但这里的问题似乎是原始类中的属性 'getKey' 和 'getText' 是只读的,这不是 javaBeans-conform。在这种情况下,XMLEncoder 会简单地忽略这些属性。在我的解决方案中,我提供了一个包装类,它只是为这两个属性添加了一个 setter,然后一切都被序列化了。

标签: java javabeans


【解决方案1】:

经过测试和反思,似乎我的解决方案在 JavaBeans 的上下文中是最简单的,只需创建包装类...

【讨论】:

    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多