我一直在上课并输入学习编程,在一些不同的课程中他们说这是你如何声明一个空变量(java和Kotlin如果我记得正确的python是一个" none"不完全是相同)。
但我阅读或学习的所有内容都表明不会这样做。 为什么这样做或是否合法使用?
REV 1.0以下
我编辑并回滚了一些这个问题,因为在进一步深入研究主题之后没有一个与null非常相似。
请不要更改我的问题,请对我如何以不同方式查看或重新构思或提出更好的问题发表评论。
答案 0 :(得分:1)
用于在外部作用域中声明变量,例如Java中未在声明中显式指定的任何Object字段默认为null
还要废除某些内容以允许垃圾回收
建议避免空值,因为追逐NPE错误是JVM开发中的一个重要时间
就个人而言,除了Nil之外,我还喜欢Try / Success或Option / Some / None的Scalas模型
答案 1 :(得分:1)
null
有多种合法用途;虽然有很多(如果不是更多)非法的。
作为一对想起来的情侣:
可选的依赖项。在下面的课程;如果在施工时提供非null
Notifier
;然后,当事情发生时,这用于通知。但是,如果没有doThing
可用(或必需),则该课程仍然可以使用Notifier
方法。
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();
}
}