我正在使用GSON将JSON解码为类型为T的对象,例如
public T decode(String json) {
Gson gson = new Gson();
return gson.fromJson(json, new TypeToken<T>() {}.getType());
}
Run Code Online (Sandbox Code Playgroud)
然而,这会返回一个例外 -
java.lang.AssertionError:意外类型.预期的一个:java.lang.reflect.ParameterizedType,java.lang.reflect.GenericArrayType,但得到:sun.reflect.generics.reflectiveObjects.TypeVariableImpl,用于类型标记:T
我认为通过使用TypeToken,我避免使用Type Erasure.
我错了吗?
谢谢
我想编写一个需要Class.class作为参数的函数
例:
class MyObject{
public whatTypeGoesHer MyFunction(something1, something2){
//do something with parameters
}
}
class MyObject1{
MyObject object = new MyObject();
MyObject1 object2 = object.MyFunction(MyObject1.class,something else);
}
Run Code Online (Sandbox Code Playgroud)
这种类型的invokation是我想要实现的,我如何定义"MyFunction"来接受这种类型的参数?
应该是什么而不是"whatTypeGoesHere"?
编辑:
让我重新解释一下这个问题
这是我的代码:
public static User fromJSON(String json, Class<?> className) {
GsonBuilder builder = new GsonBuilder();
builder.serializeNulls();
User g1 = builder.create();
User user = g1.fromJson(json, className.getClass());
return user;
}
Run Code Online (Sandbox Code Playgroud)
和它在使用过的类中的调用
User user = User.fromJSON(json,User.class);
Run Code Online (Sandbox Code Playgroud)
我想把"fromJSON"方法放到一些utils类中,因为在每个类中它都完全相同,它返回的类名不同
我怎么做?