将局部变量重构为我将返回的对象

时间:2011-12-04 20:38:04

标签: java

我有一个结果对象:

public class ActionResult {
   int ...
   String ...
   Boolean ..
}

我的方法:

public ActionResult getAbc(..) {

   String string1;
   Boolean bool1;
   int int1;

   string1 = someDao.get(p1);

   if(string1 != null) {
       bool1 = someDao.getB(string1);
   }

}

现在我想用我的ActionResult对象替换它,但发现它看起来很乱,我必须转换值,但是值可能为null,我的set调用将失败然后更正?

示例:

if(result.getString1() != null) {
    result.setBool1( someDao.getB1(result.getString1()) );
}

问题是,调用getB1的结果实际上返回一个字符串(第三方库我不能改变它),然后我必须转换为布尔值。

result.setBool1( Boolean.parseBoolean( someDao.getB1(result.getString1()) ) );

此外,对getB1的调用可能会返回null,现在是什么? 看起来代码看起来非常混乱,难以阅读你不觉得吗?

2 个答案:

答案 0 :(得分:1)

两种处理null的方法:

  1. 根据您的问题域,将null视为true或false;
  2. 将null保留为null,这根本就是未确定的。

答案 1 :(得分:0)

你必须决定当你的库返回时会发生什么null如果一个字符串是一个字符串就是将它与true进行比较。

"true".equalsCaseIgnore(valueWhichCouldBeNull)

与equals类似,如果值为null,则返回false。你必须决定这是否正确。它应该是真的还是抛出异常(它应该是什么异常?)