【发布时间】:2014-11-26 22:15:14
【问题描述】:
我在 Java 中创建了一个简单的方法,但我遇到了一个重大错误,告诉我“将对象分配给 null 是一种代码异味。考虑重构。”。因此我应该考虑重构我的代码,但我不确定我能否找到一种方法来以不同的方式重写我的代码示例。
代码如下:
public static Key buildKey(TypeA a, TypeB b) {
Date myDate = new JavaDateUtcIsoStringDateConverter().from(String.valueOf(a.getDate));
Integer DateInt = new JavaDateUtcAvroIntDateConverter().to(myDate);
TypeNb nb = b.getById(a.getNbId());
Key.Builder builder = Key.newBuilder();
builder.setOr(a.getOr());
builder.setDest(a.getDest());
builder.setDateInt(DateInt);
builder.setLine(nb.getLine());
builder.setIdNb(nb.getIdNb());
builder.setOpS(nb.getOps() != null && String.valueOf(nb.getOps()).length() > 0 ? String.valueOf(nb.getOps()) : null);
return builder.build();
}
主要错误来自builder.setOpS(nb.getOps() != null && String.valueOf(nb.getOps()).length() > 0 ? String.valueOf(nb.getOps()) : null);这一行
如何重构这个简单的条件以避免使用null?
有什么建议吗?
谢谢
【问题讨论】:
-
可能更适合代码审查,因为在最严格的意义上似乎没有实际错误。但是,为什么分配
null会被视为“代码气味”? -
这就是我要求自己说实话。我不知道如何重构。
-
我没有发现问题,但由于您还检查了字符串长度,您可以将其设置为 "" 。但我认为将其设置为 null 没有任何问题
-
如果参数是
null,你可能甚至不应该调用builder.setOpS()。
标签: java object null sonarqube