Java Reflection, создание объекта частного класса из другого пакета - PullRequest
2 голосов
/ 20 июня 2019

У меня есть закрытый класс (Deque), из которого мне нужно создать объект из другого класса вне пакета (package com.example)

package com.example;

final class Deque {

    public Deque() {}

}

Как использовать рефлексиюсоздание объекта типа com.example.Deque из класса, который не находится внутри пакета com.example?

1 Ответ

2 голосов
/ 20 июня 2019

Это сложно и обычно не рекомендуется делать это, но вы можете создать объект Deque вне пакета. Я не знаю, можете ли вы правильно указать на него тип Deque.

package com.demo;

final class NotADeque {

    public NotADeque() {}

    public static void main(String[] args) throws ClassNotFoundException, 
        NoSuchMethodException, IllegalAccessException, InvocationTargetException, 
        InstantiationException {
      Class<?> c = Class.forName("com.example.Deque");
      Constructor<?> constructor = c.getDeclaredConstructor();
      constructor.setAccessible(true);//Make the constructor accessible.

      Object o = constructor.newInstance();
      System.out.println(o);
    }
}

Это создаст экземпляр Deque, но со ссылкой Object на него. Также посмотрите на количество проверенных исключений, которые могут быть выброшены при этом, это очень хрупкий подход. Для более подробной информации проверьте этот вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...