Создание экземпляров вложенных классов в 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