为什么要分配空值



我一直在上课和打字学习编程,在几节不同的课上,他们说这就是你声明空变量的方式(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 模型

相关内容

  • 没有找到相关文章

最新更新