У меня возникла проблема в 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 () с тем же результатом.
Кто-нибудь знает, почему это может происходить?