在 Java 中将带有类型参数的类作为泛型方法的类型参数传递
问题摘要:我想将带有类型参数的类(例如,)作为类型参数传递给泛型方法。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
问题:最终,我很好奇为什么我不能传递带有类型参数的类,以及是否有办法完成我试图做的事情。
与往常一样,如果此问题有任何问题,请告诉我。