问题总结:
我想将一个带有类型参数的类(例如ArrayList<SomeClass>
,例如)作为类型参数传递给泛型方法。
假设我有一个方法:
public static <T> T getGenericObjectFromJson(String json, Class<T> genericType){
// details unimportant, basically returns an object of specified type
return JsonParser.fromJson(json, genericType);
}
当然,这种方法适用于任何类型的课程。我可以像这样调用该方法,例如:
getGenericObjectFromJson(jsonString, User.class)
问题:我发现我不能这样做:
getGenericObjectFromJson(jsonString, ArrayList<User>.class)
从语法上看,这显然是无效的。但是,我不确定我将如何完成这样的事情。当然,我可以通过ArrayList.class
,但是泛型类型的添加使其在语法上不再有效,我想不出办法解决它。
唯一直接的解决方案是这样的(这似乎很愚蠢):
getGenericObjectFromJson(jsonString, new ArrayList<User>().getClass())
然而,无论如何我们最终都会丢失泛型类型,而只是取回一个未知类型的 ArrayList(尽管它可以强制转换)。另外,不必要地实例化一个对象。
到目前为止,我唯一的解决方案是将该方法包装在一个包含可以实例化的泛型类型参数的类中,如下所示:
public class JsonDeserializer<T>...
在这种情况下,该getGenericObjectFromJson
方法将使用类的泛型类型。
问题:最终,我很好奇为什么我不能传递带有类型参数的类,以及是否有办法完成我试图做的事情。
与往常一样,如果这个问题有任何问题,请告诉我。