Передача родового типа в качестве параметра в 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);
Этот стиль по-прежнему поддерживается более высокими версиями, и даже стиль дженериков после компиляции преобразуется в эту форму. Вы получите предупреждение в коде выше, который вы можете подавить.