是否可以在Java中创建不可为空的类型?这种类型的对象不应该为空。怎么样?
答案 0 :(得分:12)
使用某些IDE和maven插件支持的@NotNull注释是一种相当普遍的做法。在Java 8中,您可以编写
@NotNull String text;
@NotNull List<@NotNull String> strings = ...;
这不是语言功能,但如果您需要,则可以使用。
注意:没有标准的@NotNull注释:(所以支持它的工具允许你配置你想要的那个。我使用IntelliJ附带的那个。它会给你提供警告具有自动修复功能的编辑器,并为null
参数添加运行时检查,返回值和变量。
注意:如果某个字段的用法也不可为,则IntelliJ能够计算出来。
答案 1 :(得分:6)
我最近遇到Checker Framework的checker for null。
@Nullable 表示包含空值的类型。例如,Boolean类型是可空的:Boolean类型的变量总是具有TRUE,FALSE或null之一。
@NonNull 表示不包含空值的类型。 boolean类型是非null; boolean类型的变量总是具有值true或false之一。类型@NonNull Boolean也是非null:@NonNull类型的变量Boolean总是具有TRUE或FALSE之一 - 永远不为null。取消引用非null类型的表达式永远不会导致空指针异常。
@PolyNull 表示限定符多态性。有关@PolyNull的说明,请参见第19.2节。
@MonotonicNonNull 表示引用可能为null,但如果它变为非null,则它永远不会再次变为null。这适用于延迟初始化字段以及其他用途。读取变量时,其类型被视为@Nullable,但是当赋值变量时,其类型将被视为@NonNull。
我还没来得及尝试。
答案 2 :(得分:0)
你做不到。这是一种语言功能。最多你能做的就是进行空检查。
答案 3 :(得分:0)
您无法在纯Java中执行此操作。 Java中的null
是对特定对象的引用的文字值。
由于Java中的所有对象都是引用类型,因此不允许null
具有语法意义。
答案 4 :(得分:0)
您不能在纯Java中做到这一点,但是注释@nonnull
将告诉编译器测试对象被分配了空值的可能路径。然后,它将引发构建错误,要求您修复具有空值的对象。
答案 5 :(得分:0)
在Java 8中,您可以考虑针对规范接口的java.util.Optional
:如果接口预示了返回值可能为“ null”的可能性,则返回String
而不是返回java.util.Optional<String>
详细信息: https://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html