Передача класса с параметром типа в качестве параметра типа для универсального метода в 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 метод будет использовать классуниверсальный тип.

Вопросы): В конечном счете, мне любопытно, почему я не могу передать класс с параметром типа, И есть ли способ выполнить то, что я пытался сделать.

Как всегда, дайте мне знать, если есть какие-либо проблемы с этим вопросом.

Ответы на вопрос(1)

Ваш ответ на вопрос