为什么null对象设计模式优于null对象检查.
如果我们在null对象设计模式中查看内存占用,我们将创建一个相同类型的新虚拟对象.这表明如果我们在搜索查询中有大尺寸和大量可空对象的对象,这个模式将创建大量的空对象,这将占用比简单检查更多的内存,对于null,我的成本可忽略的性能延迟.
如果我们在null对象设计模式中查看内存占用,我们将创建一个相同类型的新虚拟对象.这表明如果我们在搜索查询中有大尺寸和大量可空对象的对象,这个模式将创建大量的空对象,这将占用比简单检查更多的内存,对于null,我的成本可忽略的性能延迟.
解决方法
null的整个问题是,如果您尝试访问null值,应用程序将抛出NullPointerException并中止.
要减少此null对象设计模式中的类NullXXX的数量(实际上只是工厂设计数据,而不是模式本身),您可以创建一个始终返回的静态最终NullCustomer.
在Java 8中,您可以使用Optional方法来判断函数何时不总是返回值.这种方法不会强制您创建污染整体结构的任意空类(考虑可能也必须重构那些空类).
Eclipse和IntelliJ还提供编译时注释@Nullable,@ NonNull,它在访问潜在的空对象时给出编译器警告.但是,许多框架没有注释.因此IntelliJ尝试使用静态分析discover those potential null accesses.
除了采用这种方法之外,IntelliJ和Eclipse使用它们自己的注释(org.eclipse.jdt.annotation.NonNull,com.intellij.annotations.NotNull),这些注释不兼容.但是,你可以在IntelliJ中使用store the annotations outside of the code. Eclipse也希望将来实现这一点.问题是有many frameworks providing this feature给你许多不同的注释做同样的事情.有JSR-305休眠.它在javax中提供了一个注释.我不知道为什么他们没有进一步推动这一点.