public abstract class BaseDaoImpl<E extends AbstractEntity> implements BaseDao<E> {
.....
public BaseDaoImpl() throws DataAccessException {
logger = LoggerFactory.getLogger(E); <<-- error here.
}
В приведенном выше коде я получаю сообщение об ошибке в вызове getLogger(E)
.Как преобразовать общий параметр в класс
E не может быть решена с переменной
Это имеет смысл, но getLogger(E.class)
(или его варианты) не работает.
Я не хочу, чтобы пройти буквальный класс в конструкторе, так что решение, как изменение заголовка конструктора для:
public BaseDaoImpl(Class<E> clazz) ...
это не вариант.
Как получить тип класса от E
?
Обратите внимание, что ответы на вопросы: How to get class of generic type when there is no parameter of it?
не помогите.
Вы не можете, из-за типа стирание. – SLaks
Java-дженерики не совпадают с шаблонами C++. В Java-генераторах тип стирается во время компиляции. Google «стирание стирания java» для деталей. Это кажется плохим решением, но на самом деле это отличное решение; поскольку он полностью обратно совместим со старой java. – DwB
Возможный дубликат [Получить общий тип класса во время выполнения] (http: // stackoverflow.com/questions/3403909/get-generic-type-of-class-at-runtime) –