Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

136
Visualizações
Utilizando declaraciones de cambio con enumeraciones e interfaz de marcador

Tengo una interfaz de marcador

 public interface Marker{}

y dos enumeraciones que implementan el marcador

 public enum Sharpie implements Marker{ RED, BLUE, BLACK } public enum Crayola implements Marker{ PURPLE, ORANGE, GREEN }

Lo que estoy tratando de hacer es utilizar una declaración de cambio, como

 public boolean isOwned(Marker m){ // Take in a marker of either Sharpie, or Crayola switch(m){ case BLUE: case BLACK: case GREEN: return true; default: return false; } }

¿Hay alguna manera de hacer esto sin usar una costosa instanceof de llamada?

Algo como esto funcionaría, pero estoy tratando de evitar el uso de instanceof y, francamente, se ve un poco feo.

 public boolean isOwned(Marker m){ // First determine instanceof and then cast the marker // to the appropriate Type before utilizing the switch statement if (m instanceof Sharpie){ switch((Sharpie) m){ Case BLUE: Case BLACK: return true; default: return false; } } else { switch((Crayola) m){ case Green: return true; default: return false; } } }
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Parece un buen escenario para probar la nueva interfaz sellada de funciones de Java y la coincidencia de patrones para cambiar expresiones (* esta es una función de vista previa como en jdk 17)

Primero haga Marker como interfaz sellada

 public sealed interface Marker permits Crayola, Sharpie {}

Entonces podemos usar la expresión de cambio para deshacernos de esas instanceof de verificación.

 public boolean isOwned(Marker marker) { boolean isOwned = switch (marker) { case Sharpie s -> s == Sharpie.BLACK || s == Sharpie.BLUE; case Crayola c -> c == Crayola.GREEN; }; return isOwned; }
over 4 years ago · Santiago Trujillo Relatório

0

Simplemente cambie el switch a if . No hay necesidad de una instanceof de:

 public boolean isOwned(Marker m){ if(m == Sharpie.BLUE || m == Sharpie.BLACK || m == Crayola.GREEN) return true; return false; }
over 4 years ago · Santiago Trujillo Relatório

0

no se que estas haciendo este ejemplo está usando una función única para 2 enumeraciones diferentes. Creo que deberías usar extender en enumeración como esta .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda