gpt4 book ai didi

language-agnostic - 为每个类创建一个 NullObject 是否可行? (当然有工具)

转载 作者:行者123 更新时间:2023-12-05 00:06:24 24 4
gpt4 key购买 nike

NullObjectPattern旨在成为“安全”(中立)行为。

这个想法是创建一个不做任何事情的对象(但也不抛出 NullPointerException )

例如定义为的类:

class Employee {
private String name;
private int age;
public String getName(){ return name; }
public int getAge() { return age; }
}

在此代码中会导致 NullPointerException:
 class Other {
Employee oscar;

String theName = oscar.getName(); // NPE

}

NOP 所说的是,您可以拥有这样的对象:
 class NullEmployee extends Employee {
public static final Employee instance = new NullEmployee();
public String getName(){ return ""; }
public int getAge() { return 0; }
}

然后将其用作默认值。
 Employee oscar = NullEmployee.instance;

问题来了,当您需要为创建的每个类重复代码时,解决方案是使用工具来创建它。

创建这样的工具或使用它(如果存在)是否可行/合理/有用?

也许使用 AOP 或 DI 可以自动使用默认值。

最佳答案

对我来说,空对象模式感觉就像安慰剂。真实对象和空对象可能具有完全不同的含义,但行为非常相似。就像安慰剂一样,空对象会诱使您相信没有任何问题,但某些事情可能非常错误。

我认为这是一个很好的做法 及早失败,经常失败 .最后,您需要在某处区分真实对象和空对象,此时它与检查 null 没有什么不同。指针。

来自 Wikipedia article :

The advantage of this approach over a working default implementation is that a Null Object is very predictable and has no side effects: it does nothing.



它也不会指出任何问题。想一想当一个空对象在您的应用程序中一路传播时会发生什么。然后,在某些时候,您的应用程序期望来自对象的某些行为,而空对象实现无法提供这些行为。那时您的应用程序可能会崩溃或进入无效状态。您将拥有一个 很难追踪空对象的来源 . A null指针会在开始时抛出异常,将您的注意力直接吸引到问题的根源。

维基百科文章给出的唯一示例是一个空集合而不是 null .这是一个很好的实践,但它是空对象模式的一个糟糕示例,因为它处理的是一组对象,而不是单个实例。

简而言之,我确信为所有类创建空对象实现是可行的,但我强烈建议不要这样做。

关于language-agnostic - 为每个类创建一个 NullObject 是否可行? (当然有工具),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3266179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com