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

时间:2018-07-25 16:39:01

标签: java optional non-nullable

是否可以用Java null记录返回值不是Optional

Most tools and frameworks只关心参数,但是我想用类型表示返回值不是null(而不是JavaDoc中的值)。

更新:如果您想表达可能的Optional并在绝对不为空的情况下直接指向对象,则可以同意团队使用null作为返回值: / p>

public Optional<Job> getJob() {  ... }
public Job extractJob(NonNullJobHolder<Job> holder) { ... }

2 个答案:

答案 0 :(得分:2)

我不知道为什么您会觉得它们大多数仅适用于参数。

org.eclipse.jdt.annotation.NonNull

@Documented
@Retention(value=CLASS)
@Target(value={FIELD,METHOD,PARAMETER,LOCAL_VARIABLE})
public @interface NonNull

org.jetbrains.annotations.NotNull

  

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

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

用法:

intellij @NotNull

javax.validation.constraints.NotNull

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

javax.annotation.Nonnull

@Documented
@TypeQualifier
@Retention(value=RUNTIME)
public @interface Nonnull

用法:

javax @Nonnull


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

答案 1 :(得分:1)

您可以使用.OrElse()。看到这个例子

Optional<String> response = Optional.of("Not Null");
    Optional<String> response2 = Optional.empty();
    System.out.println(response.orElse(""));
    System.out.println(response2.orElse("Dont want to return null"));