Home > Back-end >  Message about a redundant nullcheck of list which is known to be null
Message about a redundant nullcheck of list which is known to be null

Time:04-14

I need to have an empty list, to which I'll add some objects (that I pick and parse from AWS S3) based on some criterion. The list might remain empty at the end, which is why I'm checking for null before passing this on to the next function.

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;
}

However, when I'm building my code, I get the following FindBug error, which is failing my build:

Redundant nullcheck of allRows which is known to be null

What would be the best way to work around this without disabling the Findbugs?

CodePudding user response:

You do have allRows.add(v); but indeed allRows = new ArrayList<>(); is missing, and as allRows is effectively final, it must be done at the declaration. And even then the if is superfluous. So FindBugs is and will be right.


Also a version with 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);
    }

CodePudding user response:

You are trying to add a value to your "allRows" list, but this list is null. What you have to do is create your List in another way:

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

  • Related