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

204
Visualizações
SomeEnum.values() se define en una clase o interfaz inaccesible al cambiar la enumeración

Consideremos la clase base:

 package base; public abstract class Base { protected enum BaseEnum { FIRST, SECOND, THIRD } }

Y su subclase:

 package a; import base.Base; public class A { // The error message appears in case when NestedA is a nested or inner class protected /* static */ class InnerA extends Base { protected BaseEnum getEnumA() { return BaseEnum.FIRST; } protected int xxx() { BaseEnum enumA = getEnumA(); switch (enumA) { // ^^ base.NestedBase.BaseEnum.values() is defined in an inaccessible class or interface case FIRST: case SECOND: return 1; default: return 2; } } protected int xxx2() { BaseEnum enumA = getEnumA(); if (enumA == BaseEnum.FIRST || enumA == BaseEnum.SECOND) { return 1; } else { return 2; } } protected int xxx3() { System.out.println(BaseEnum.values()); return 2; } } }

Cuando intento compilarlo, aparece un error de compilación en línea con la declaración de cambio en xxx() que dice:

java: base.Base.BaseEnum.values() is defined in an inaccessible class or interface

Brevemente, la pregunta es ¿qué está pasando exactamente aquí? ¿Por qué values() incluso se llaman aquí? Si realmente se llama, ¿por qué es inaccesible? Como puede ver, puedo acceder correctamente a BaseEnum y sus miembros desde esta clase (ver xxx2() ) e incluso el método de values() (que es un método público de enumeración anidada protegida dentro de la superclase InnerA , ver xxx3() ). ¿Se calcula el acceso como si este interruptor estuviera dentro de la clase A ? Si es así, ¿por qué?

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

0

Esto se planteó como un error bugs.openjdk.java.net/browse/JDK-8178701 pero no ha recibido comentarios de los mantenedores de Java, por lo que puedo ver. Entonces, no está claro si se considera un error válido.

over 4 years ago · Santiago Trujillo Relatório

0

Posibles soluciones:

La primera solución que encontré fue que A tiene que extenderse desde Base, no InnerA. Para que pueda acceder al BaseEnum protegido en su clase interna InnerA.

La segunda solución es simplemente hacer público el BaseEnum.

¿Por qué esto es tan?

La declaración de cambio es el problema, como supuso en su pregunta. Pero no tengo ni idea ni encontré algo por qué esto es un problema para que la declaración de cambio cambie a través de una enumeración protegida en esta constelación.

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