我需要在实用程序类中添加一个方法,其中包含一些静态方法,这些方法从JSON字符串中解析事物并返回一系列事物。
问题是这些东西有各种各样的子类型,所以我创建了这个方法:
public static <E extends Thing> E[] parseThingsFromJSON(String body) {
return parser.fromJson(body, E[].class);
}
调用者如何告诉此方法E
是什么?或者有更好的方法吗?
答案 0 :(得分:6)
你需要传递它。
public static <E extends Thing> E[] parseThingsFromJSON(String body, Class<E[]> eClass) {
return parser.fromJson(body, eClass);
}
泛型主要是编译时功能。这意味着它在运行时不可用(有一些例外)
在这种情况下,要使泛型类型在运行时可用,您必须将其作为附加参数传递。
答案 1 :(得分:1)
从内存中,这与使用Arrays.asList()
时的问题类似这样你就可以了
Arrays.<MyOjbect>(new MyObject(), new MyObject());
或在您传递数组的特定情况下 例如
Arrays.<Integer[]>asList(new Integer[]{new Integer(1)});
JDK中此方法的签名是
public static <T> List<T> asList(T... a){...}
与我的想法类似