是否可以用 Java Optional 记录返回值不为空?

gav*_*koa 2 java non-nullable optional

是否可以记录返回值不是nullJava 的Optional

大多数工具和框架只关心参数,但我想用返回值不是的类型来表达null(而不是在 JavaDoc 中这样做)。

UPDATE Looks line 你可以同意团队使用Optional作为返回值,如果你想表达可能null和直接的对象,当它绝对不为空时:

public Optional<Job> getJob() {  ... }
public Job extractJob(NonNullJobHolder<Job> holder) { ... }
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 5

我不知道为什么你的印象是它们中的大多数只适用于参数。

org.eclipse.jdt.annotation.NonNull

@Documented
@Retention(value=CLASS)
@Target(value={FIELD,METHOD,PARAMETER,LOCAL_VARIABLE})
public @interface NonNull
Run Code Online (Sandbox Code Playgroud)

org.jetbrains.annotations.NotNull

@NotNull 注释实际上是一个明确的合同,声明:

  • 方法不应返回 null
  • 变量(字段、局部变量和参数)不能为空值

用法:

智能@NotNull

javax.validation.constraints.NotNull

@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
@Retention(value=RUNTIME)
@Documented
@Constraint(validatedBy={})
public @interface NotNull
Run Code Online (Sandbox Code Playgroud)

javax.annotation.Nonnull

@Documented
@TypeQualifier
@Retention(value=RUNTIME)
public @interface Nonnull
Run Code Online (Sandbox Code Playgroud)

用法:

javax @Nonnull


因此,请随意在您的方法中使用这四种中的任何一种。