Я извиняюсь за продвинутый недостаток знаний в дженериках ... Я пытаюсь понять, как работают дженерики, и я не уверен, что это такое, но у меня отсутствует ключевая часть, которая ускользает от меня так, надеюсь кто-то может прояснить немного больше и получить меня над этим горбом.вызовы метода общего класса
BaseDtoUtil.mapToDto(map, OcrImageDocDto.class); //OcrImageDocDto extends DtoUtils
//This method is in class BaseDtoUtil
public static <T> List<T> mapToDto(Map<String, Object> map, Class<? extends DtoUtils> klass) throws SparkSQLException{
T obj = (T)klass.newInstance();
//return a list of these
}
Так что я думаю, есть два вопроса, у меня есть:
- первых, почему это жалуются, когда я прохожу в
OcrImageDocDto.class
, когда переменная, определенная для вызова метода является любой класс? (Я изначально имел это как (Class<?>
). Это не означает какое-либо значение класса? Очевидно, я ошибаюсь, но не уверен, что это значит. - Второй вопрос: если я отправляю значение класса, я действительно могу получить это экземпляр и возвращает значение типа обратно?
<T> List<T>
? Если я не ошибаюсь, я считаю, что общие переменный<T> List<T>
используются для конкретизации объекта. Но что они делают, если это статический метод?
Я немного потеряно и, может быть, я понимаю, что дженерики ошибочны ... Поэтому, если кто-то может очистить эти два, я думаю, что это поможет!
Вам нужно будет использовать '' вместо того, чтобы просто '', и 'Класс extends T>'. –
Также интересует: https://docs.oracle.com/javase/tutorial/java/generics/erasure.html –
рассмотреть возможность изменения подписи на public public Список mapToDto (Карта map, Class klass) '- чтобы метод знал« Список », какой тип он должен вернуть. –