给出如下定义
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();
calculate()
的返回值可能是Type.NULL
,只要结果为null,而不是检查
if (t == null)
一个人会检查
if (t == Type.NULL)
因此使calculate()
的返回类型始终为非null。
(问题不在于这是否是最佳实践,它只是试图验证此方法不存在任何准确性问题。)
答案 0 :(得分:1)
另一个选择是创建一个类型为:
的具体NullType
子类
class NullType extends Type {
@Override
public void method() {
...
}
}
然后您的方法可以返回NullType
实例,因此检查将是:
if (t instanceof NullType)
让NullType
成为单身人士可能也是有意义的。
答案 1 :(得分:1)
从OO设计的角度来看,我会区分两种情况。
您希望模拟已返回 nothing ,该变量尚未定义值。在这种情况下,我会使用null
。我看不到使用if (t == Type.NULL)
代替if (t == null)
的任何优势。
您想要建模空操作/值已经返回,变量已定义,但该值是一种"零"。在这种情况下,我会使用您的解决方案,但我不会根据您的业务逻辑将其称为NULL
,而是VOID
或EMPTY
或类似。这不是因为你想使用if (t == Type.NULL)
而不是if (t == null)
,而是因为你想不使用任何 - 你可以只使用它包含的变量