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";
}
}
“`
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 objetoTestEnum.TEST_EXTENSION
, puedes modificar el métodomain
de la siguiente manera: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 siTestEnum.TEST_EXTENSION.getFields()
es una instancia deTestEnum.TestStaticsExtension
y luego lo convertimos aTestEnum.TestStaticsExtension
para acceder al valorTEST_STATICS_EXTENSION_FIELD
.