我需要在实用程序类中添加一个方法,其中包含一些静态方法,这些方法从 JSON 字符串中解析事物并返回一个事物数组。
问题是这些东西有各种子类型,所以我创建了这个方法:
public static <E extends Thing> E[] parseThingsFromJSON(String body) {
return parser.fromJson(body, E[].class);
}
调用者如何告诉这个方法是什么E
?还是有更好的方法来做到这一点?
我需要在实用程序类中添加一个方法,其中包含一些静态方法,这些方法从 JSON 字符串中解析事物并返回一个事物数组。
问题是这些东西有各种子类型,所以我创建了这个方法:
public static <E extends Thing> E[] parseThingsFromJSON(String body) {
return parser.fromJson(body, E[].class);
}
调用者如何告诉这个方法是什么E
?还是有更好的方法来做到这一点?
你需要通过它。
public static <E extends Thing> E[] parseThingsFromJSON(String body, Class<E[]> eClass) {
return parser.fromJson(body, eClass);
}
泛型在很大程度上是一个编译时特性。这意味着它在运行时不可用(有一些例外)
在这种情况下,要使泛型类型在运行时可用,您必须将其作为附加参数传递。
从内存来看,这与使用 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){...}
我认为这与您的相似