java - 对常量对象值使用赋值而不是相等

标签 java equals assign

给出如下定义

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设计的角度来看,我会区分两种情况。

  1. 您想要建模没有返回,变量尚未定义值。在这种情况下,我将使用 null。我看不出使用 if (t == Type.NULL) 而不是 if (t == null) 有任何优势。

  2. 您想要建模一个已返回的空操作/值,该变量已定义,但该值是一种“零”。在这种情况下,我会使用您的解决方案,但我不会将其称为 NULL,而是根据您的业务逻辑将其称为 VOIDEMPTY 或类似的解决方案。这是更可取的,不是因为您想要使用 if (t == Type.NULL) 而不是 if (t == null),而是因为您想要 根本不使用任何 if - 您可以只使用该变量,因为它包含有意义的(但为空)值。

关于java - 对常量对象值使用赋值而不是相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23614728/

相关文章:

java - android 上的 3ds 动画

python - 如何比较 python 自定义类中 None 对象的相等性?

r - 在一行中为 LHS 分配多个新变量

java - 使用 Java 记录将复杂/嵌套对象序列化(反)序列化为 JSON

java - Android MediaRecorder 属性

Java 8 使用带有 SealedObject 的 ECIES 密码失败,并显示 'NullPointerException' - 字符串不能为空

java - 为什么我的 equals 方法无法识别对象变量?

java - 数组中的值未分配 - java

java - 声明二维变量Java