1

我需要在实用程序类中添加一个方法,其中包含一些静态方法,这些方法从 JSON 字符串中解析事物并返回一个事物数组。

问题是这些东西有各种子类型,所以我创建了这个方法:

public static <E extends Thing> E[] parseThingsFromJSON(String body) {
    return parser.fromJson(body, E[].class);
}

调用者如何告诉这个方法是什么E?还是有更好的方法来做到这一点?

4

2 回答 2

6

你需要通过它。

public static <E extends Thing> E[] parseThingsFromJSON(String body, Class<E[]> eClass) {
    return parser.fromJson(body, eClass);
}

泛型在很大程度上是一个编译时特性。这意味着它在运行时不可用(有一些例外)

在这种情况下,要使泛型类型在运行时可用,您必须将其作为附加参数传递。

于 2012-08-31T10:28:49.063 回答
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){...}

我认为这与您的相似

于 2012-08-31T10:29:19.203 回答