Установите тип шаблона T во время выполнения, передавая переменную - PullRequest
0 голосов
/ 09 января 2019

Есть ли способ передать переменную Class при создании нового шаблонного класса с именем TemplateClass или это абсолютно бессмысленно?

Пример того, что я хотел бы сделать, но это не компилируется:

final List<TemplateClass> fields = new ArrayList<>();

public void loadDataFields() {
    for(Field x : ClassA.class.getDeclaredFields()) {
        fields.add(new TemplateClass<x.getClass()>());
    }
}

Редактировать

Вот это TemplateClass:

public class TemplateClass<T extends Comparable> {
    int count;
    T min;
    T max; 
}

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Вы не можете назначить Type в качестве универсального класса во время выполнения.

Дженерики могут использоваться только во время компиляции.

0 голосов
/ 09 января 2019

Короче - №

Нет способа, которым он создает экземпляр шаблона с динамическим классом во время выполнения. Это потому, что шаблоны оцениваются во время сборки.

0 голосов
/ 09 января 2019

В Java дженерики оцениваются как (в основном) информация времени компиляции из-за Типа Erasure .

Строка new TemplateClass<x.getClass()>() не имеет смысла, поскольку x.getClass() оценивается только во время выполнения. Эта строка может привести к ошибке компиляции.

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