Un cas d'utilisation populaire de la correspondance de modèles avec switch consiste à travailler avec différents types de données dans un programme. Prenons l'exemple suivant d'une classe WeatherStation qui possède différents types de capteurs et renvoie la température actuelle :
`Station météo de classe publique {
private Sensor sensor; public double getCurrentTemperature() { return switch (sensor) { case TemperatureSensor t -> t.reading(); case HumiditySensor h -> h.reading() * 0.9; // apply a 10% moisture correction default -> 0.0; // in case of an unhandled sensor type, return 0 }; }
}
`
Ici, nous pouvons voir qu'une interface Sensor est utilisée pour l'expression du sélecteur et que les étiquettes de cas utilisent des modèles basés sur des implémentations spécifiques de Sensor : TemperatureSensor et HumiditySensor. Cela permet une manière plus concise et lisible de gérer différents types de données dans l'instruction switch.
Un autre cas d'utilisation de la correspondance de modèles avec switch concerne le traitement des énumérations. Avant l'introduction de la correspondance de modèles, les énumérations ne pouvaient être utilisées que comme constantes dans les étiquettes de cas, limitant les valeurs pouvant être testées dans une instruction switch. Avec la nouvelle fonctionnalité, les énumérations peuvent désormais être qualifiées dans des étiquettes de cas, permettant une correspondance plus précise et plus flexible.
Direction de l'énumération publique {
NORD,
EST,
SUD,
OUEST
}
mouvement vide public (direction direction) {
changer (direction) {
cas NORD,NORTH_WEST,NORTH_EAST -> moveUp();
cas EAST,EAST_NORTH,EAST_SOUTH -> moveRight();
cas SUD, SOUTH_EAST, SOUTH_WEST -> moveDown();
cas WEST,WEST_NORTH,WEST_SOUTH -> moveLeft();
}
}
Ici, la méthode move() utilise une instruction switch pour gérer facilement les déplacements dans différentes directions en fonction de la valeur d'énumération Direction spécifiée. Grâce à la correspondance de modèles, nous pouvons également spécifier des combinaisons directionnelles, telles que NORTH_WEST et EAST_SOUTH, rendant notre code plus robuste et flexible.
Enfin, regardons un exemple de la façon dont la correspondance de modèles peut aider à la gestion des erreurs dans une instruction switch. Dans le commutateur traditionnel, si l'expression du sélecteur ne correspond à aucune des étiquettes de cas, un cas par défaut peut être utilisé pour gérer l'erreur. Cependant, cela peut s'avérer fastidieux lorsqu'il s'agit de traiter plusieurs étiquettes de cas et conduire à une duplication de code. Dans la correspondance de modèles, une exception est levée si aucun des modèles d'étiquette de cas ne correspond à l'expression du sélecteur, ce qui rend la gestion des erreurs plus uniforme et moins sujette aux erreurs.
public String getPlanetaryObject (corps PlanetaryBody) {
interrupteur de retour (corps) {
case Planet p && p.getMass() > 1e29 -> p.getName() " est une géante gazeuse";
case Planet p && p.getMass() > 1e23 -> p.getName() " est une planète rocheuse";
case Star s && s.getLuminosity() > 1e32 -> s.getName() " est une étoile brillante";
case Star s && s.getLuminosity() s.getName() " est une étoile faible";
par défaut -> throw new MatchException("Impossible de déterminer le type d'objet planétaire : " body.getName());
};
}
Dans cet exemple, la méthode getPlanetaryObject() prend en compte un objet PlanetaryBody, qui peut être une planète ou une étoile. Les motifs utilisés dans les étiquettes des boîtiers prennent en compte des conditions supplémentaires, telles que la masse de la planète ou la luminosité de l'étoile. Si aucun des modèles ne correspond, une MatchException est levée, ce qui rend la gestion des erreurs plus cohérente et empêche toute erreur potentielle.
Conclusion
La correspondance de modèles pour le commutateur est l’une des fonctionnalités les plus importantes introduites récemment dans Java. Il permet des structures de flux de contrôle plus flexibles et concises.
Améliorez vos compétences Java en passant la certification Java SE 21 Professional Certified Developer.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3