开发者

Java Generics, Create an instance of Class<T>

I am trying to write a generic method for deserializing json into my model. My problem is that I don't know how to get Class from the generic type 开发者_高级运维T. My code looks something like this (and doesn't compile this way)

public class JsonHelper {

    public <T> T Deserialize(String json)
    {
        Gson gson = new Gson();

        return gson.fromJson(json, Class<T>);
    }
}

I tried something else, to get the type, but it throws an error I had the class as JsonHelper<T> and then tried this

Class<T> persistentClass = (Class<T>) ((ParameterizedType)getClass()
    .getGenericSuperclass())
    .getActualTypeArguments()[0];

The method signature looks like this

com.google.gson.Gson.fromJson(String json, Class<T> classOfT)

So, how can I translate along T so that when I call JsonHelper.Deserialize<MyObject>(json); I get an instance of the correct object?


You need to get a Class instance from somewhere. That is, your Deserialize() method needs to take a Class<T> as a parameter, just like the underlying fromJson() method.

Your method signature should look like Gson's:

<T> T Deserialize(String json, Class<T> type) ...

Your calls will look like this:

MyObject obj = helper.Deserialize(json, MyObject.class);

By the way, the convention to start method names with a lowercase letter is well established in Java.


Unfortunately, the way Java handles generics, you cannot get the class like you're asking. That's why Google's stuff asks specifically for the class as an argument. You'll have to modify your method signature to do the same.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜