Un cas d'utilisation populaire de la correspondance de modèles avec switch est celui où l'on travaille 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 :
`Classe publique WeatherStation {
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 les é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. Grâce à cette 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 EST, 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) {
cas Planète p && p.getMass() > 1e29 -> p.getName() + " est une géante gazeuse";
cas Planète 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() < 1e28 -> 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 soit une planète, soit 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.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!