«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как создать экземпляры вложенных классов в Java с помощью отражения?

Как создать экземпляры вложенных классов в Java с помощью отражения?

Опубликовано 15 ноября 2024 г.
Просматривать:310

How to Instantiate Nested Classes in Java Using Reflection?

Создание экземпляров вложенных классов в Java посредством отражения

Невозможность создать экземпляр внутреннего класса, определенного в предоставленном коде Java, с использованием стандартных методов отражения распространенная ошибка, с которой сталкиваются разработчики Java. При попытке создать экземпляр напрямую с помощью Class.newInstance() проблема возникает из-за наличия скрытого параметра, представляющего экземпляр включающего класса.

Чтобы успешно создать экземпляр внутреннего класса, необходимо использовать Class.getDeclaredConstructor() для доступа к конструктору и предоставления экземпляра включающего класса в качестве аргумента. Следующий фрагмент кода иллюстрирует этот подход:

// 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);

Альтернативно, если вложенный класс не зависит от включающего экземпляра, более прямое решение — объявить его как статический вложенный класс:

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

Используя эти подходы, разработчики могут эффективно создавать экземпляры как зависимых, так и независимых внутренних классов, используя отражение в Java.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3