我一直在上课和打字学习编程,在几节不同的课上,他们说这就是你声明空变量的方式(java和Kotlin,如果我记得的话,python是一个"无"不完全相同(。
但是我读到或学到的一切都说不要这样做。为什么要这样做或是否有合法用途?
修订版 1.0 以下
我编辑并回滚了这个问题,因为在对主题进行了更多挖掘之后,none 的行为与空非常相似。
与其改变我的问题,请评论我如何以不同的方式看待它或重新构建或提出更好的问题。
null
有多种合法用途;尽管同样多(如果不是更多的话(非法用途。
作为一对浮现在脑海中的夫妇:
可选依赖项。 在下面的班级;如果在施工时提供了非null
Notifier
;然后,这用于在事情发生时通知。 但是,如果没有可用的(或必需的(此类Notifier
,该类仍然可以执行doThing
方法。
class ThingDoer {
private final Notifier notifier;
ThingDoer(final Notifier notifier) {
this.notifier = notifier;
}
void doThing() {
// Doing some stuff.
if (this.notifier != null) {
this.notifier.notify("Did thing");
}
}
}
缓存是另一种情况(如果已经计算过缓存值,请使用缓存值,否则从头开始查找它 - 这里不考虑线程安全性...... 同样的概念也适用于延迟加载的东西;在首次请求之前,您可以将值保留为null
,然后使其保持可用以避免在后续请求中重新计算。
class CachedLookup {
private Result cachedResult = null;
Result getResult() {
if (this.cachedResult != null) {
return this.cachedResult;
}
this.cachedResult = this.getResultInternal();
return this.cachedResult;
}
private Result getResultInternal() {
// Whatever complex stuff here...
return new Result();
}
}
用于在外部作用域中声明变量,例如,Java 中未在声明时显式分配的任何 Object 字段默认为 null
还取消引用某些内容以允许垃圾收集
建议避免空值,因为追查NPE错误是JVM开发中的一个重要时间槽
就个人而言,除了零之外,我喜欢尝试/成功或选项/一些/无的 Scalas 模型