"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Explorando o poder da correspondência de padrões com switch em Java 21

Explorando o poder da correspondência de padrões com switch em Java 21

Publicado em 17/08/2024
Navegar:468

Exploring the Power of Pattern Matching with Switch in Java 21

Um caso de uso popular para correspondência de padrões com switch é ao trabalhar com diferentes tipos de dados em um programa. Considere o seguinte exemplo de uma classe WeatherStation que possui diferentes tipos de sensores e retorna a temperatura atual:

`classe pública Estação Meteorológica {

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
    };
}

}
`
Aqui, podemos ver que uma interface Sensor é usada para a expressão do seletor, e os rótulos de caso usam padrões baseados em implementações específicas do Sensor: TemperatureSensor e HumiditySensor. Isso permite uma maneira mais concisa e legível de lidar com diferentes tipos de dados na instrução switch.

Outro caso de uso para correspondência de padrões com switch é ao lidar com enums. Antes da introdução da correspondência de padrões, enums só podiam ser usados ​​como constantes em rótulos de caso, restringindo os valores que poderiam ser testados em uma instrução switch. Com o novo recurso, enums agora podem ser qualificados em rótulos de casos, permitindo uma correspondência mais precisa e flexível.

direção de enum público {
NORTE,
LESTE,
SUL,
OESTE
}

movimento vazio público (direção direção) {
mudar (direção) {
caso NORTE, NORTE_OESTE, NORTE_EAST -> moveUp();
caso EAST,EAST_NORTH,EAST_SOUTH -> moveRight();
caso SUL, SOUTH_EAST, SOUTH_WEST -> moveDown();
caso WEST,WEST_NORTH,WEST_SOUTH -> moveLeft();
}
}

Aqui, o método move() usa uma instrução switch para lidar facilmente com movimentos em diferentes direções com base no valor enum Direction especificado. Com a correspondência de padrões, também podemos especificar combinações direcionais, como NORTH_WEST e EAST_SOUTH, tornando nosso código mais robusto e flexível.

Finalmente, vejamos um exemplo de como a correspondência de padrões pode ajudar no tratamento de erros em uma instrução switch. Na opção tradicional, se a expressão do seletor não corresponder a nenhum dos rótulos de caso, um caso padrão poderá ser usado para tratar o erro. No entanto, isso pode ser entediante ao lidar com vários rótulos de casos e pode levar à duplicação de código. Na correspondência de padrões, uma exceção é lançada se nenhum dos padrões de rótulo de caso corresponder à expressão do seletor, tornando o tratamento de erros mais uniforme e menos sujeito a erros.

public String getPlanetaryObject(corpoPlanetaryBody) {
interruptor de retorno (corpo) {
case Planeta p && p.getMass() > 1e29 -> p.getName() "é um gigante gasoso";
case Planeta p && p.getMass() > 1e23 -> p.getName() "é um planeta rochoso";
case Star s && s.getLuminosity() > 1e32 -> s.getName() "é uma estrela brilhante";
case Star s && s.getLuminosity() s.getName() "é uma estrela fraca";
padrão -> throw new MatchException("Não foi possível determinar o tipo de objeto planetário: " body.getName());
};
}

Neste exemplo, o método getPlanetaryObject() recebe um objeto PlanetaryBody, que pode ser um planeta ou uma estrela. Os padrões usados ​​nas etiquetas das caixas consideram condições adicionais, como a massa do planeta ou a luminosidade da estrela. Se nenhum dos padrões corresponder, uma MatchException será lançada, tornando o tratamento de erros mais consistente e evitando possíveis erros.

Conclusão
A correspondência de padrões para switch é um dos recursos mais significativos introduzidos em Java nos últimos tempos. Ele permite estruturas de fluxo de controle mais flexíveis e concisas.

Atualize suas habilidades em Java obtendo a certificação Java SE 21 Professional Certified Developer.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/myexamcloud/exploring-the-power-of-pattern-matching-with-switch-in-java-21-506a?1 Se houver alguma violação, entre em contato com study_golang @163.com excluir
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3