Je déterre ce message – j'adore déterrer – pour exposer mon expérience récente (la dernière heure) :
Pour moi, l'absence de goto en Java, bien que venant d'intention louables, pose quand même problème dans certaines situations un peu particulières.
Quand ce flux est contenu dans une seule et unique méthode, j'utilise return (attention, c'est du EBean et tout un foutoir de Json...) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public void setAdresse(JsonNode adresse) {
if (adresse.has("id")) {
this.adresse = Adresse.find.byId(UUID.fromString(adresse.get("id")
.asText()));
if (this.adresse != null)
return;
}
List<Adresse> adresseList = Adresse.search(adresse);
if (adresseList.size() == 1) {
this.adresse = adresseList.get(0);
return;
}
this.adresse = Adresse.fromJson(adresse);
} |
Quand je ne peux pas sortir d'une méthode (la logique n'est qu'une partie d'une méthode un peu plus vaste), c'est moche, j'utilise une fausse boucle while, un
label et des break :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| bloc: while (true) {
if (contactNode.has("id")) {
contact = Contact.find.byId(contactNode.get("id").asInt());
if (contact != null)
break bloc;
}
List<Contact> contactList = Contact.search(contactNode);
if (contactList.size() == 1) {
contact = contactList.get(0);
break bloc;
}
contact = Contact.fromJson(contactNode);
break bloc;
} |
Bien sûr, il y a probablement d'autres solutions, c'est la plus claire que j'ai trouvée pour le moment. Je vois difficilement comment factoriser ce genre de truc.
Partager