Передача родового типа в качестве параметра в java?

Можно ли сохранить тип в переменной,
чтобы создать экземпляр списка этого типа?

//something like that
Type type = Boolean;
List<type> list = new List<type>();
list.add(true);

Ответ 1

Для первого требования вы ищете Class:

Class type = Boolean.class;

Однако, я не думаю, что требование секунд возможно, поскольку общие типы существуют только во время компиляции:

List<type> list = new List<type>(); // invalid code

Однако вы можете работать с List<Object>. Он примет объекты Boolean. Будь то вы купите вам все, что не зависит от вашего использования.

Ответ 2

Generic - это функция времени компиляции, а не время запуска, поэтому вы не можете использовать переменную для определения общего типа, даже используя примечание NPE (используя Class) не будет компилироваться:

Class<?> type = Boolean.class;
// can't do that...
List<type> list = new List<type>();
list.add(true);

Ответ 3

Во втором случае, почему вы хотите использовать generics, когда тип неизвестен? Вы можете лучше использовать универсальный arraylist (используется до jdk 5).

   List a = new ArrayList();
   a.add(object);

Этот стиль по-прежнему поддерживается более высокими версиями, и даже стиль дженериков после компиляции преобразуется в эту форму. Вы получите предупреждение в коде выше, который вы можете подавить.