给出如下定义
public interface Type
{
public static final Type NULL = new Type() { public void method() {} };
public void method();
}
如果从 Type
的实现创建对象的所有代码都使用(并检查相等性)提到的 Type.NULL
值,是否会出现相等性检查错误上面?
例如,假设声明如下
public Type calculate() {...}
Type t = calculate();
只要结果为 null,calculate()
的返回值就可以是 Type.NULL
,而不是进行检查
if (t == null)
有人会检查
if (t == Type.NULL)
从而使calculate()
的返回类型始终为非空。
(问题不在于这是否是要遵循的最佳实践,它只是试图验证这种方法不会出现任何准确性问题。)
最佳答案
从OO设计的角度来看,我会区分两种情况。
您想要建模没有返回,变量尚未定义值。在这种情况下,我将使用
null
。我看不出使用if (t == Type.NULL)
而不是if (t == null)
有任何优势。您想要建模一个已返回的空操作/值,该变量已定义,但该值是一种“零”。在这种情况下,我会使用您的解决方案,但我不会将其称为
NULL
,而是根据您的业务逻辑将其称为VOID
或EMPTY
或类似的解决方案。这是更可取的,不是因为您想要使用if (t == Type.NULL)
而不是if (t == null)
,而是因为您想要 根本不使用任何 if - 您可以只使用该变量,因为它包含有意义的(但为空)值。
关于java - 对常量对象值使用赋值而不是相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23614728/