问题总结:
我想传递一个类与类型参数(例如ArrayList< SomeClass>例如)作为类型参数的通用方法。
假设我有一个方法:
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().class)
然而,我们最终失去通用类型,只是回到一个未知类型的ArrayList(尽管它可以被转换)。另外,不必要地实例化对象。
我迄今为止唯一的解决方案是将该方法包装在一个类中,该类包含可以实例化的通用类型参数,如下所示:
public class JsonDeserializer...
在这种情况下,getGenericObjectFromJson方法将使用类的泛型类型。
问题:最后,我很好奇为什么我不能传递一个类的类型参数,以及是否有一种方法来完成我试图做的。
一如既往,让我知道如果这个问题有任何问题。
|