2016-04-27 1 views
0

Мне нужно поставить класс. У меня есть класс Foo, поэтому, если я поставлю Foo.class, он отлично работает, но мне нужно поставить List<Foo>.class, но этого не существует.Foo.class работает, но список <Foo>. Класс не

Как передать класс типа списка?

Любая помощь приветствуется.

+0

Вы правы, 'Список .class' не существует, из-за стирания типа. Существует только «List.class». – azurefrog

ответ

2

Вы не можете, из-за type erasure. Во время выполнения параметры типового типа стираются и больше не доступны. В результате, хотя List<Foo> может существовать во время компиляции как общий, во время выполнения вы будете иметь только List.class, типа Class<List>.

От Java Language Specification, version 8, section 15.8.2:

Это ошибка во время компиляции, если указанный тип является тип переменной (§4.4) или параметризованный тип (§4.5) или массив, тип которого элемент представляет собой тип переменный или параметризованный тип.

Например, List<Foo>.class, T.class, List<Foo>[].class и T[].class все недействительные (при условии, что T является параметром типа).

Смежные вопросы