为什么 Mono 不能持有 NULL
Why can't a Mono hold a NULL
Mono.just(null) 不会编译。这是为什么?
在程序层面上我明白了。有一个没有要处理的东西的处理队列是没有意义的。有人可以用更深入的技术为我解释这个吗?
按照 Reactive-Streams 的规定
Calling onSubscribe, onNext, onError or onComplete MUST return normally except when any provided parameter is null in which case it MUST throw a java.lang.NullPointerException to the caller, for all other
并且 Reactor 基于 Reactive Streams。
就我个人而言,我不喜欢这个规则,但规则不是我定的。既然要用,那就只能跟着了
我猜Flux是Reactor的核心,Mono是附带的。对于流,禁止 NULL 可能是一个合理的选择,尽管它对 Mono 不方便。
让 null
进入 application/library 有很高的风险,如果可以禁止,应该禁止。
Null
就像是在您的应用程序中放了一颗炸弹,如果某些东西可能是 null
,那么某些东西可能会随时以 NullPointerException
爆炸。
null
始终在应用程序中产生巨大的不确定性。你应该尽早清理 null
。
人们通过到处进行 null
检查来解决这个问题,这基本上是多余的操作。
先生。 Tony Hoare - null
的发明者著名地声称 null
是他的:
billion dollar mistake.
有很多编程语言没有 null,这里有一个长长的列表:
在流中使用 null
是没有意义的,因为这也意味着反应堆库必须在他们的代码中进行 null
检查以确保他们不会尝试对 null
值进行运算。每个人都必须在每个 flatMap
、map
、filter
、operator
等处进行 null
检查,因为总共可能存在 NullPointerException
那些运营商。
所以他们有机会排除 null
,这很有意义,因为 null
不是一个值,而且只有值可以在流中传输,所以这可能就是他们决定反对的原因它。
相反,他们决定使用类型 Void
来表示“无”,可以通过调用 Mono<Void> nothing = Mono.empty();
获得类型安全的类型,如果你触摸它不会爆炸,并且表现得像你一样期待,因为开发人员控制它,而不是运行时。
我反而会问自己,为什么你真的需要 null
?我猜是因为你已经习惯了,习惯性地编写代码是不好的。
我看到 null 被使用的次数有 95% 可能已被删除。
学习如何在没有 null
的情况下进行编码,养成使用默认值、回退值等的习惯。这很可能会使您的程序更健壮,更具确定性。
原因已经被其他人解释过了,Mono.justOrEmpty(null) 的存在是为了让你的生活更轻松一些,如果你想让 null 产生一个空的 Mono,但它需要是一个你的深思熟虑
Mono.just(null) 不会编译。这是为什么?
在程序层面上我明白了。有一个没有要处理的东西的处理队列是没有意义的。有人可以用更深入的技术为我解释这个吗?
按照 Reactive-Streams 的规定
Calling onSubscribe, onNext, onError or onComplete MUST return normally except when any provided parameter is null in which case it MUST throw a java.lang.NullPointerException to the caller, for all other
并且 Reactor 基于 Reactive Streams。
就我个人而言,我不喜欢这个规则,但规则不是我定的。既然要用,那就只能跟着了
我猜Flux是Reactor的核心,Mono是附带的。对于流,禁止 NULL 可能是一个合理的选择,尽管它对 Mono 不方便。
让 null
进入 application/library 有很高的风险,如果可以禁止,应该禁止。
Null
就像是在您的应用程序中放了一颗炸弹,如果某些东西可能是 null
,那么某些东西可能会随时以 NullPointerException
爆炸。
null
始终在应用程序中产生巨大的不确定性。你应该尽早清理 null
。
人们通过到处进行 null
检查来解决这个问题,这基本上是多余的操作。
先生。 Tony Hoare - null
的发明者著名地声称 null
是他的:
billion dollar mistake.
有很多编程语言没有 null,这里有一个长长的列表:
在流中使用 null
是没有意义的,因为这也意味着反应堆库必须在他们的代码中进行 null
检查以确保他们不会尝试对 null
值进行运算。每个人都必须在每个 flatMap
、map
、filter
、operator
等处进行 null
检查,因为总共可能存在 NullPointerException
那些运营商。
所以他们有机会排除 null
,这很有意义,因为 null
不是一个值,而且只有值可以在流中传输,所以这可能就是他们决定反对的原因它。
相反,他们决定使用类型 Void
来表示“无”,可以通过调用 Mono<Void> nothing = Mono.empty();
获得类型安全的类型,如果你触摸它不会爆炸,并且表现得像你一样期待,因为开发人员控制它,而不是运行时。
我反而会问自己,为什么你真的需要 null
?我猜是因为你已经习惯了,习惯性地编写代码是不好的。
我看到 null 被使用的次数有 95% 可能已被删除。
学习如何在没有 null
的情况下进行编码,养成使用默认值、回退值等的习惯。这很可能会使您的程序更健壮,更具确定性。
原因已经被其他人解释过了,Mono.justOrEmpty(null) 的存在是为了让你的生活更轻松一些,如果你想让 null 产生一个空的 Mono,但它需要是一个你的深思熟虑