大佬们喜欢用 Null-Safe 的注解吗

2022-05-18 15:17:27 +08:00
 MakHoCheung

我所知的有 Jetbrains annotation 、Spring lang 和 Jakarta annotation 这几个包都有这些注解。 看了下 idea 社区版的源码,它在方法的入参和返回值都声明 NotNullNullable感觉好啰嗦啊,不标 IDEA 就 warning 或者有 @ 标记。 大佬们喜欢用么。

2548 次点击
所在节点    Java
19 条回复
wolfie
2022-05-18 15:21:16 +08:00
常用,就是给 API 打标记。
zed1018
2022-05-18 15:44:28 +08:00
老实讲,不喜欢用。所以我选择了 kotlin 。直接 nullable type 了
lmshl
2022-05-18 15:46:56 +08:00
不喜欢,因为我们 Scala 有 Option 😏
从来没在线上见过自己的代码 NPE ,倒是用的其他库偶尔会蹦几个 NPE 出来
BBCCBB
2022-05-18 15:50:22 +08:00
@lmshl 握草, rust 的 option 是不是抄的 scala 的.
Rwing
2022-05-18 15:53:06 +08:00
欢迎体验一下 C# 🙂
Leviathann
2022-05-18 15:56:04 +08:00
@BBCCBB 有没有听过一个语言叫 Ocaml
这也是第一版 rustc 的实现语言
yazinnnn
2022-05-18 16:01:02 +08:00
@BBCCBB
有没有一种可能,是从 maybe monad 演变过来的?
lmshl
2022-05-18 16:10:22 +08:00
@BBCCBB Option / Maybe 很多语言都有,毕竟 null 是 The Billion Dollar Mistake.
realrojeralone
2022-05-18 16:32:46 +08:00
一般不用,在 null 值传进来会导致 npe 的频繁调用点用 NonNull ,对于专门为了处理 null 值的工具类会用 Nullable
SMGdcAt4kPPQ
2022-05-18 16:36:38 +08:00
@Rwing How about F# ?
chendy
2022-05-18 16:36:42 +08:00
不用
警告关掉,完事
Building
2022-05-18 16:45:26 +08:00
新生代语言都用?替代了,古董语言 Nullable 果断关掉,啰哩啰嗦
MakHoCheung
2022-05-18 17:10:08 +08:00
@chendy 😂
MakHoCheung
2022-05-18 17:15:23 +08:00
@realrojeralone 其实我是想不标注的情况下默认 NonNull ,会传 null 的地方加个 NonNull 声明就好了,一个注解搞定,不知道为啥默认的 idea 不这样 inspect 。
MakHoCheung
2022-05-18 17:16:07 +08:00
@Building 确实,好啰嗦
cppc
2022-05-18 18:03:02 +08:00
会用,可以省去注释的说明。一般只显示标注 nullable ,结合 package-info 声明默认都是 nonnull 也不麻烦。 类似这样 https://github.com/John-Chan/fckit/blob/master/fist-kit-boot-parent/fist-kit-boot-core/src/main/java/com/power4j/fist/boot/apidoc/package-info.java
o02VFqu3gZnZfX8n
2022-05-18 18:14:28 +08:00
1. 可以使用类似这样的注解指定默认类型 "@ParametersAreNonnullByDefault"
2. 如果一个值没有指定 nullable 类型,和 Kotlin 混用会比较危险,Java 的 String 在 Kotlin 里既可能是 String 也可能是 String?,也就是说 Nullable 会被当作 NonNull ,非常危险。
MakHoCheung
2022-05-18 18:25:01 +08:00
@cppc 这个可以啊跟我的想法差不多
gabon
2022-05-18 18:56:23 +08:00
我一般会加上,因为加上后如果少判 npe 或者多判编译器和 infer 等静态代码分析工具可以帮助发现错误。但是我发现工作中其它同事可能不愿意关注这个。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/853721

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX