Ein beliebter Anwendungsfall für den Mustervergleich mit Switch ist die Arbeit mit verschiedenen Datentypen in einem Programm. Betrachten Sie das folgende Beispiel einer WeatherStation-Klasse, die über verschiedene Arten von Sensoren verfügt und die aktuelle Temperatur zurückgibt:
`public class 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 }; }
}
`
Hier können wir sehen, dass eine Sensorschnittstelle für den Selektorausdruck verwendet wird und die Fallbeschriftungen Muster verwenden, die auf bestimmten Sensorimplementierungen basieren: TemperatureSensor und HumiditySensor. Dies ermöglicht eine prägnantere und lesbarere Art und Weise, verschiedene Datentypen in der Switch-Anweisung zu verarbeiten.
Ein weiterer Anwendungsfall für den Mustervergleich mit Switch ist der Umgang mit Aufzählungen. Bevor der Mustervergleich eingeführt wurde, konnten Aufzählungen nur als Konstanten in Case-Beschriftungen verwendet werden, wodurch die Werte eingeschränkt wurden, anhand derer in einer Switch-Anweisung getestet werden konnte. Mit der neuen Funktion können Aufzählungen jetzt in Fallbezeichnungen qualifiziert werden, was einen präziseren und flexibleren Abgleich ermöglicht.
public enum Direction {
NORDEN,
OSTEN,
SÜDEN,
WESTEN
}
öffentliche Leere bewegen(Richtung Richtung) {
Schalter (Richtung) {
Fall NORTH,NORTH_WEST,NORTH_EAST -> moveUp();
Fall EAST,EAST_NORTH,EAST_SOUTH -> moveRight();
Fall SOUTH,SOUTH_EAST,SOUTH_WEST -> moveDown();
Fall WEST,WEST_NORTH,WEST_SOUTH -> moveLeft();
}
}
Hier verwendet die Methode move() eine Switch-Anweisung, um Bewegungen in verschiedene Richtungen basierend auf dem angegebenen Direction-Enumerationswert einfach zu handhaben. Mit dem Mustervergleich können wir auch Richtungskombinationen wie NORTH_WEST und EAST_SOUTH angeben, wodurch unser Code robuster und flexibler wird.
Schauen wir uns abschließend ein Beispiel an, wie der Mustervergleich bei der Fehlerbehandlung in einer Switch-Anweisung helfen kann. Wenn beim herkömmlichen Switch der Selektorausdruck mit keiner der Fallbezeichnungen übereinstimmt, kann ein Standardfall zur Behandlung des Fehlers verwendet werden. Dies kann jedoch beim Umgang mit mehreren Fallbezeichnungen mühsam sein und zu Codeduplizierung führen. Beim Mustervergleich wird eine Ausnahme ausgelöst, wenn keines der Case-Label-Muster mit dem Selektorausdruck übereinstimmt, wodurch die Fehlerbehandlung einheitlicher und weniger fehleranfällig wird.
public String getPlanetaryObject(PlanetaryBody body) {
Rücklaufschalter (Körper) {
case Planet p && p.getMass() > 1e29 -> p.getName() + " ist ein Gasriese";
case Planet p && p.getMass() > 1e23 -> p.getName() + " ist ein felsiger Planet";
case Star s && s.getLuminosity() > 1e32 -> s.getName() + " ist ein heller Stern";
case Star s && s.getLuminosity() < 1e28 -> s.getName() + „ ist ein schwacher Stern“;
Standard -> throw new MatchException("Typ des Planetenobjekts konnte nicht bestimmt werden: " + body.getName());
};
}
In diesem Beispiel nimmt die Methode getPlanetaryObject() ein PlanetaryBody-Objekt auf, das entweder ein Planet oder ein Stern sein kann. Die in den Fallbeschriftungen verwendeten Muster berücksichtigen zusätzliche Bedingungen, wie etwa die Masse des Planeten oder die Leuchtkraft des Sterns. Wenn keines der Muster übereinstimmt, wird eine MatchException ausgelöst, wodurch die Fehlerbehandlung konsistenter wird und potenzielle Fehler verhindert werden.
Fazit
Der Mustervergleich für Switch ist eine der wichtigsten Funktionen, die in jüngster Zeit in Java eingeführt wurden. Es ermöglicht flexiblere und prägnantere Kontrollflussstrukturen.
Verbessern Sie Ihre Java-Kenntnisse, indem Sie die Java SE 21 Professional Certified Developer-Zertifizierung absolvieren.
Das obige ist der detaillierte Inhalt vonEntdecken Sie die Leistungsfähigkeit des Mustervergleichs mit Switch in Java 21. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!