Да, это довольно чертовски раздражает.
Работа, которую я использую, заключается в том, чтобы заставить клиента передать класс при построении нового foo
- т.е.
public foo(Class<T> myClass)
Тогда вы можете использовать myClass.newInstance()
вместо него.
При выполнении JVM не знает, что это так, что он не может создать новые объекты типа T. типов, стираются во время компиляции .
Это ограничение способа реализации дженериков Java. Для обеспечения совместимости кода, использующего дженерики, с унаследованным кодом перед дженериками, добавленными к языку, дженерики были реализованы с использованием стирания типа. Это вызывает много путаницы у людей, которые происходят из лангузов, таких как C++ и ожидают, что дженерик будет работать таким же образом.
Подробнее о последствиях этого здесь хорошая ссылка
-121--4541876-Да, это чертовски раздражает.
При создании нового foo < T >
, т.е.
public foo(Class<T> myClass)
Вместо этого можно использовать myClass.newInstance ()
.
Я бы всегда предпочитал творческую образец (фабрика, прототип,...). Особенно
открытый foo (класс < T > myClass)
Вместо этого можно использовать
myClass.newInstance ()
.
является плохим решением, поскольку T может не иметь пустого конструктора.
Это ограничение в том, как java реализует дженерики. Для обеспечения совместимости кода, использующего дженерики, с наследственным кодом до дженериков, которые были добавлены в язык, дженерики были реализованы с помощью стирания типов. Это вызывает много путаницы у людей, которые приходят из таких лангов, как C++, и ожидают, что дженерики будут работать таким же образом.
Более подробно о последствиях этого можно прочитать здесь по хорошей ссылке
Вы можете использовать тип шаблона класса, если вы его подтипируете. См. Мой ответ на другой вопрос - Создание экземпляров обобщенного типа в java .