我们正在使用的方法,不能对其进行任何更改。
void existingMethod(String p1, String p2){
if(p1==null)
p1 = makeP1();
//do work
}
我从我的代码中调用了该方法,
existingMethod(null, "dfdfdf");
我收到了评论评论以创建String NULL_STRING = null
,并在我的代码中使用该变量而不是null
字面值。你如何证明这一点?
编辑:这仅仅是为了可读性吗?然后我有类似的方法,Long amount,
和一些函数,我们传递null
。如何对NULL_AMOUNT
执行相同的操作?
答案 0 :(得分:2)
这是关于代码风格的问题。我不建议这样做,但推理可能是可扩展性。
想象一下有人引入了该方法的新重载:
void existingMethod(OtherClass p1, String p2) {
...
}
现在existingMethod(null, "dfdfdf");
导致编译错误,而existingMethod(NULL_STRING, "dfdfdf");
则没有。
答案 1 :(得分:1)
这类问题总有两种观点:
换句话说:当你团队中的每个人都期望使用一些TYPED_NULL_CONST而不是null时,那么这可能是最佳选择。
但另一方面,团队之外的大多数人会发现这个政策非常尴尬。
从这个意义上讲:与评论评论的人交谈,看看它的来源;而背后的想法是什么。然后处理它。
并且为了记录:我们的团队更喜欢既不采用null也不返回null的方法。
答案 2 :(得分:1)
existingMethod
的实施值得怀疑,因为它需要null
个值。技术上 - 嗯,它有效。
但我至少提供了像
这样的重载方法void existingMethod(String p2) {
existingMethod(null, p2)
}
通常 - 所谓的null对象是很好的做法。这是一种立即避免大量NPE的方法。但我同意评论员的意见,宣布发送真实null
的常数是......废话。
答案 3 :(得分:1)
为了得到一点迂腐,你不会被要求使用Null对象。正如@GhostCat所说,你有一个Typed Null Constant。 Null Object Pattern使用任何类型的实际对象,在调用方法时不执行任何操作。它可以传递而不是null。我自己在Typed Null Constant中看不到多少价值。