Что может привести к тому, что Class # newInstance заблокирует поток, пока не будет уничтожен? - PullRequest
0 голосов
/ 17 февраля 2020

У меня возникла проблема в Java, когда экземпляр обобщенного c класса не может быть создан с помощью отражения и блокирует асинхронный поток CompletableFuture, в котором он запущен. Я не уверен, что может вызвать это без каких-либо исключений.

Класс, который я пытаюсь создать, имеет единственный, публичный c, пустой конструктор (где обычно он не указывает никаких ):

    public UserInfo() {
        System.out.println("New instance"); // TODO
    }

Код отражения:

    public static <T extends InfoCore> CompletableFuture<T> get(Class<T> infoClass, PlayerInfo playerInfo) {
        System.out.println("Getting an Info Core"); // TODO
        return CompletableFuture.supplyAsync(() -> {
            System.out.println("Supplying the info core async thread"); // TODO
            try {
                System.out.println("Trying"); // TODO
                T instance = infoClass.newInstance();
                System.out.println("Got new instance"); // TODO
                instance.setPlayerInfo(playerInfo);
                System.out.println("Set player info in the instance"); // TODO
                instance.load();
                System.out.println("Loaded the instance"); // TODO
                return instance;
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException("Error occurred instantiating an InfoCore");
            }
        });
    }

Я получаю все сообщения System.out вплоть до "попытки". Сообщение «Got new instance» никогда не печатается, и весь поток asyn c останавливается на неопределенное время (мне приходилось каждый раз останавливать процесс). Я также попытался использовать Class # getConstructor (new Class [0]). NewInstance () с тем же результатом.

Кто-нибудь знает, почему это может происходить?

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