"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo crear instancias de clases anidadas en Java usando Reflection?

¿Cómo crear instancias de clases anidadas en Java usando Reflection?

Publicado el 2024-11-15
Navegar:352

How to Instantiate Nested Classes in Java Using Reflection?

Creación de instancias de clases anidadas en Java mediante reflexión

La incapacidad de crear instancias de la clase interna definida en el código Java proporcionado utilizando métodos de reflexión estándar es un error común al que se enfrentan los desarrolladores de Java. Al intentar crear una instancia directamente usando Class.newInstance(), el problema surge debido a la presencia de un parámetro oculto que representa una instancia de la clase adjunta.

Para crear una instancia exitosa de una clase interna, es necesario emplear Class.getDeclaredConstructor() para acceder al constructor y proporcionar una instancia de la clase adjunta como argumento. El siguiente fragmento de código ilustra este enfoque:

// Exceptions omitted for brevity
Class> enclosingClass = Class.forName("com.mycompany.Mother");
Object enclosingInstance = enclosingClass.newInstance();

Class> innerClass = Class.forName("com.mycompany.Mother$Child");
Constructor> ctor = innerClass.getDeclaredConstructor(enclosingClass);

Object innerInstance = ctor.newInstance(enclosingInstance);

Como alternativa, si la clase anidada no depende de la instancia adjunta, una solución más sencilla es declararla como una clase anidada estática:

public class Mother {
    public static class Child {
        public void doStuff() {
            // ...
        }
    }
}

Al utilizar estos enfoques, los desarrolladores pueden crear instancias efectivas de clases internas dependientes e independientes mediante la reflexión en Java.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3