有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (1) 个答案

  1. # 1 楼答案

    下面是实现这一点的代码

    import java.util.Objects;
    import java.util.stream.Stream;
    import org.checkerframework.checker.nullness.qual.NonNull;
    import org.checkerframework.checker.nullness.qual.Nullable;
    
    class RemoveNullsFromStream {
    
      @SuppressWarnings("nullness") // Nullness Checker is not hard-coded with
                      // implementation details of filter and Objects::nonNull
      <T>
      Stream<@NonNull T> removeNullsFromStream(Stream<@Nullable T> arg) {
        return arg.filter(Objects::nonNull);
      }
    
    }
    

    注意@SuppressWarnings的使用,因为空值检查器是保守的:当它不能确定地证明代码是安全的时,就会发出警告。一般来说,filter的输出与其输入相同;当filter的参数为Objects::nonNull时,这是一个特例

    这种特殊情况可以硬编码到空度检测器中,这将使空度检测器更加精确。这种行为目前不是特例,所以您可以使用@SuppressWarnings