es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Accede a la implementación de una clase específica desde un objeto estático.

¿Es posible en Java obtener una clase de implementación específica al llamar a un método en un objeto estático específico?

Lo que quiero lograr:

public static void main(String[] args) {
    String testBase = TestEnum.TEST_BASE.getFields().TEST_STATICS_BASE_FIELD;
    String testExtension = TestEnum.TEST_EXTENSION.getFields().TEST_STATICS_EXTENSION_FIELD;    //esto no compila
}
public enum TestEnum {
    TEST_BASE(new TestStaticsBase()),
    TEST_EXTENSION(new TestStaticsExtension()),
    ;

    public TestStaticsBase fields;

    TestEnum(TestStaticsBase fields) {
        this.fields = fields;
    }

    public TestStaticsBase getFields() {
        return fields;
    }

    public static class TestStaticsBase {
        public final String TEST_STATICS_BASE_FIELD = "TEST_STATICS_BASE_FIELD";
    }

    public static class TestStaticsExtension extends TestStaticsBase {
        public final String TEST_STATICS_EXTENSION_FIELD = "TEST_STATICS_EXTENSION_FIELD";
    }
}

“`

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible obtener una clase de implementación específica al llamar un método en un objeto estático específico en Java. Una forma de lograr esto es usando el operador instanceof para verificar el tipo del objeto en tiempo de ejecución y luego realizar una conversión a la clase de implementación deseada.

    Por ejemplo, para obtener el valor TEST_STATICS_EXTENSION_FIELD del objeto TestEnum.TEST_EXTENSION, puedes modificar el método main de la siguiente manera:

    public static void main(String[] args) {
        String testBase = TestEnum.TEST_BASE.getFields().TEST_STATICS_BASE_FIELD;
    
        if (TestEnum.TEST_EXTENSION.getFields() instanceof TestEnum.TestStaticsExtension) {
            TestEnum.TestStaticsExtension extensionFields = (TestEnum.TestStaticsExtension) TestEnum.TEST_EXTENSION.getFields();
            String testExtension = extensionFields.TEST_STATICS_EXTENSION_FIELD;
            System.out.println(testExtension); // imprime "TEST_STATICS_EXTENSION_FIELD"
        }
    }
    

    Ten en cuenta que es necesario verificar el tipo del objeto antes de realizar la conversión para evitar ClassCastException. En este caso, primero verificamos si TestEnum.TEST_EXTENSION.getFields() es una instancia de TestEnum.TestStaticsExtension y luego lo convertimos a TestEnum.TestStaticsExtension para acceder al valor TEST_STATICS_EXTENSION_FIELD.

Comments are closed.