Передача класса с параметром типа в качестве параметра типа для универсального метода в Java
Краткое описание проблемы: Я хотел бы передать класс с параметром типа (например,ArrayList
Например, к универсальному методу в качестве параметра типа.
Позволять'скажем, у меня есть метод:
public static T getGenericObjectFromJson(String json, Class genericType){
// details unimportant, basically returns an object of specified type
return JsonParser.fromJson(json, genericType);
}
Этот метод, конечно, прекрасно подойдет для любого класса. Я могу вызвать метод, например, так:
getGenericObjectFromJson(jsonString, User.class)
Эта проблема: Я обнаружил, что не могу этого сделать:
getGenericObjectFromJson(jsonString, ArrayList.class)
Синтаксически это явно недействительно. Тем не менее, я не уверен, как бы я мог сделать что-то подобное. Я могу, конечно, пройтиArrayList.class
Однако добавление универсального типа делает его синтаксически недействительным, и я не могу придумать, как его обойти.
Единственным прямым решением было что-то вроде этого (что выглядит довольно глупо):
getGenericObjectFromJson(jsonString, new ArrayList().getClass())
Однако мы в конечном итоге теряем универсальный тип в любом случае и просто возвращаем ArrayList неизвестного типа (хотя он может быть приведен). Плюс, излишняя реализация объекта.
Мое единственное решение до сих пор заключалось в том, чтобы обернуть этот метод в класс, который содержит параметр общего типа, который может быть создан, например, так:
public class JsonDeserializer...
В этом случаеgetGenericObjectFromJson
метод будет использовать классуниверсальный тип.
Вопросы): В конечном счете, мне любопытно, почему я не могу передать класс с параметром типа, И есть ли способ выполнить то, что я пытался сделать.
Как всегда, дайте мне знать, если есть какие-либо проблемы с этим вопросом.