Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要分配空值?_Java_Null_Kotlin - Fatal编程技术网

Java 为什么要分配空值?

Java 为什么要分配空值?,java,null,kotlin,Java,Null,Kotlin,我一直在学习编程,在一些不同的课程中,他们说这就是如何声明一个空变量java和Kotlin,如果我没记错的话,python是一个none不完全相同的 但我读到或学到的每件事都说不要这样做。 为什么要这么做,或者有合法的用途 下文第1.0版 我对这个问题进行了一些编辑和回滚,因为在深入研究主题之后,none的行为与null非常相似 不要改变我的问题,请评论我如何看待它,如何重新定义或提出更好的问题。对于在外部范围中声明变量,例如Java中未在声明时显式指定的任何对象字段,默认为空 另外,还取消了一

我一直在学习编程,在一些不同的课程中,他们说这就是如何声明一个空变量java和Kotlin,如果我没记错的话,python是一个none不完全相同的

但我读到或学到的每件事都说不要这样做。 为什么要这么做,或者有合法的用途

下文第1.0版

我对这个问题进行了一些编辑和回滚,因为在深入研究主题之后,none的行为与null非常相似


不要改变我的问题,请评论我如何看待它,如何重新定义或提出更好的问题。

对于在外部范围中声明变量,例如Java中未在声明时显式指定的任何对象字段,默认为空

另外,还取消了一些允许垃圾收集的功能

建议避免空值,因为跟踪NPE错误是JVM开发中的一个大问题


就个人而言,我喜欢Try/Success或Option/Some/None的Scalas模型,除了Nil之外,null还有多种合法用法;虽然非法的也同样多,如果不是更多的话

作为一对突然浮现在脑海中的夫妻:

可选的依赖项。在下面的班级;如果施工时提供了非空通知程序;然后,当事情发生时,这是用来通知的。但是,如果没有可用的或必需的通知程序,该类仍然可以执行其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();
    }
}
原因如果root==null{/*do cool stuff*/}。null是一种不给变量赋值的方法。它可以用于默认值,也可以用于缺少某些内容的情况。显然,处理可能为null的变量总是很危险的,因为它们不引用任何对象。我的意思是,如果你有一个像buyApple这样的方法,它应该退回一个苹果,如果超市已经关门了,没有苹果,你会怎么做?在这种特定情况下,您可以返回null,但可选的可能更好。显然,您的程序逻辑需要处理这种情况。如果你错过了,你会得到例外。