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

Posts les plus consultés de ce blog

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables