Я озадачен дженериками. Вы можете объявить поле, например:
Class<Collection<String>> clazz = ...
Кажется логичным, что вы можете присвоить этому полю:
Class<Collection<String>> clazz = Collection<String>.class;
Однако это порождает ошибку:
Синтаксическая ошибка в токене " > ", после этого токена ожидается void
Итак, похоже, что оператор .class
не работает с дженериками. Поэтому я попробовал:
class A<S> { }
class B extends A<String> { }
Class<A<String>> c = B.class;
Также не работает, генерирует:
Несоответствие типов: невозможно преобразовать из
Class<Test.StringCollection> to Class<Collection<String>>
Теперь я действительно не понимаю, почему это не должно работать. Я знаю, что общие типы не подтверждены, но в обоих случаях он, кажется, полностью безопасен по типу, не имея доступа к родовым типам времени выполнения. Кто-нибудь есть идея?