【问题标题】:BeanIO defautl values for unset fields?未设置字段的 BeanIO 默认值?
【发布时间】:2015-02-26 18:43:33
【问题描述】:

我有一个beanio 的固定长度记录 bean,如下所示:

@Record
public class RecordBean {
   @Field(at = 0, length = 3)
   private String field1;

   @Field(at = 3, length = 10)
   private String field2;

   //etc
}

现在我想将该 bean 也用作我的应用程序中的传输对象,然后使用 beanio 将其解组到 fixedLength 记录。

问题:当我访问RecordBean 的字段时,我永远无法确定该字段是否可能是null,因为我自己创建了对象:

RecordBean r = new RecordBean();
r.getField1(); //may be null

问题:我可以使用beanio 以默认值初始化bean 吗?例如,一个空字符串,其长度与@Field 注释中给出的确切长度一致?

我可以将每个 getter 包装在 StringUtils.defaultString(value) 中作为一种解决方法,但这就是样板代码。

【问题讨论】:

  • 我知道我可以在marshalling 期间控制null 的值。但是我想在编组之前初始化字段,因为我想使用对象本身,并且如果我找到一种方法来预初始化字段的长度,则不必对每个属性执行空检查。
  • beanio 是否绝对有必要为您执行此操作?有一种非常简单的方法可以自行实现。
  • 我看到了您的编辑。这就是我所说的。我看不出在 getter 中添加 StringUtils.defaultString(value) 有什么问题。它很干净。它在一个地方(每个字段)。无需在您的客户端代码周围添加空检查。唯一的区别是,您现在将其放在 getter 中,而不是让注释定义默认行为。
  • 是的。您可以使用此解决方案,如果有人确实回答了您的问题,那么转向注释应该不是一项艰巨的工作。是的,返回一个空的 ArrayList 确实有意义..

标签: java bean-io


【解决方案1】:

是的,

根据来自 beanio 的 documentation 字段:

default :该字段的默认值。 解组流时,当字段文本为 null 或空字符串时,在 bean 对象上设置此值。并且在编组时,当属性值为 null 或 ignore 设置为 true 时使用默认值(除非禁用)。 使用为字段配置的相同类型处理程序将默认值转换为 Java 对象。

带配置文件:

<field name="myField" type="string" default="default" />

带注释:

@Field(at = 3, length = 10, default = "defaultValue")
private String field;

【讨论】:

    【解决方案2】:

    不应该是defaultValue而不是default吗?

    @Field(at = 3, length = 10, defaultValue = "whateverValue")
    private String field;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-29
      • 2015-06-21
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多