在Java中创建不可为空的类型

时间:2014-04-24 10:36:00

标签: java null nullable

是否可以在Java中创建不可为空的类型?这种类型的对象不应该为空。怎么样?

6 个答案:

答案 0 :(得分:12)

使用某些IDE和maven插件支持的@NotNull注释是一种相当普遍的做法。在Java 8中,您可以编写

@NotNull String text;
@NotNull List<@NotNull String> strings = ...;

这不是语言功能,但如果您需要,则可以使用。

注意:没有标准的@NotNull注释:(所以支持它的工具允许你配置你想要的那个。我使用IntelliJ附带的那个。它会给你提供警告具有自动修复功能的编辑器,并为null参数添加运行时检查,返回值和变量。

注意:如果某个字段的用法也不可为,则IntelliJ能够计算出来。

答案 1 :(得分:6)

我最近遇到Checker Frameworkchecker 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