关于已知为空的列表的冗余空检查的消息

Message about a redundant nullcheck of list which is known to be null

我需要一个空列表,我将根据某些标准向其中添加一些对象(我从 AWS S3 中挑选和解析的对象)。该列表最后可能仍为空,这就是为什么我在将其传递给下一个函数之前检查 null 的原因。

public String handleRequest(S3Event s3Event, Context context) {    
    List <myClass> allRows = null;

    s3Event.getRecords().stream()
            .map(S3EventNotification.S3EventNotificationRecord::getS3)
            .forEach(s3Entity -> {
                // some code

                myClass v = jsonSerDe.fromJson(line, myClass.class);
                allRows.add(v);

                // some code
                });

    if(allRows!=null){
        putRecordsinKinesis(allRows);
    }
    return null;
}

但是,当我构建代码时,出现以下 FindBug 错误,导致我的构建失败:

Redundant nullcheck of allRows which is known to be null

在不禁用 Findbugs 的情况下解决此问题的最佳方法是什么?

您确实有 allRows.add(v); 但实际上缺少 allRows = new ArrayList<>();,并且由于 allRows 实际上是最终的,因此必须在声明中完成。即使那样 if 也是多余的。所以 FindBugs 是而且将是正确的。


还有一个版本Collectors.toList()

    List <myClass> allRows = s3Event.getRecords().stream()
            .map(S3EventNotification.S3EventNotificationRecord::getS3)
            .map(s3Entity -> {
                // some code

                myClass v = jsonSerDe.fromJson(line, Vendor.class);

                // some code
                return v;
                })
            .collect(Collectors.toList());

    if (!allRows.isEmpty()) {
        putRecordsinKinesis(allRows);
    }

您正在尝试向“allRows”列表中添加一个值,但该列表为空。您所要做的是以另一种方式创建您的列表:

List<MyClass> allRows = new ArrayList<>();