Message à propos d'un nullcheck redondant de liste qui est connu pour être nul
J'ai besoin d'avoir une liste vide, à laquelle j'ajouterai des objets (que je sélectionne et analyse à partir d'AWS S3) en fonction de certains critères. La liste peut rester vide à la fin, c'est pourquoi je vérifie null avant de le transmettre à la fonction suivante.
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;
}
Cependant, lorsque je construis mon code, j'obtiens l'erreur FindBug suivante, qui fait échouer ma construction :
nullcheck redondant de allRows qui est connu pour être nul
Quelle serait la meilleure façon de contourner ce problème sans désactiver les Findbugs ?
Solution du problème
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.
Aussi une version avec 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);
}
Commentaires
Enregistrer un commentaire