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

386
Visualizações
¿Es posible refinar clases selladas con "métodos sellados"?

Estoy jugando con las clases selladas de vista previa en Java 15, y me preguntaba por qué las palabras clave sealed y non-sealed solo se aplican a las clases e interfaces, pero no a los métodos (como lo hacen otros modificadores). Me imagino que podría ser útil decidir específicamente cuál de los métodos puede ser anulado por las subclases permitidas.

Un ejemplo: tengo una clase Unit que tiene dos subclases Metric e Imperial , que finalmente implementan una funcionalidad básica, aquí kind() .

 public abstract sealed class Unit permits Imperial, Metric { public abstract String kind (); } public abstract non-sealed class Imperial extends Unit { @Override public final String kind() { return "imperial"; } } public abstract non-sealed class Metric extends Unit { @Override public final String kind() { return "metric"; } }

Esto funciona. Sin embargo, ahora no quiero implementar kind() en todas las subclases, sino proporcionar una implementación que sea definitiva para todas las subclases, excepto aquellas en las que se permite la anulación. En mi mente esto se vería así:

 public abstract sealed class Unit permits Imperial, Metric { // this is not supported public sealed String kind () permits Imperial {return "easy"; } } public abstract non-sealed class Imperial extends Unit { @Override public final String kind() { return "oh my god"; } } public abstract non-sealed class Metric extends Unit { // should not be possible to override kind() here or in any subclass }

¿Hay alguna forma de que pueda lograr esto con las nuevas funciones o hay alguna otra forma que me falta?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Puede hacer esto con clases de acceso a paquetes.

Coloque las tres clases en su propio paquete y delegue kind() a un método privado del paquete, es decir, un método que no sea ni público ni protegido ni privado. Esto permitirá que solo las clases en ese paquete lo anulen:

 package com.example.units; public abstract sealed class Unit permits Imperial, Metric { public final String kind () { return kindImpl(); } String kindImpl() { return "easy"; } } package com.example.units; public abstract class Imperial extends Unit { @Override String kindImpl() { return "imperial"; } }

kindImpl() es un paquete privado, por lo que solo las clases en el mismo paquete pueden anularlo.

Esto funciona en cualquier versión de Java, independientemente de si se están utilizando clases selladas.

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