静态方法中的泛型

时间:2012-08-31 10:26:37

标签: java generics static-methods

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

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

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

调用者如何告诉此方法E是什么?或者有更好的方法吗?

2 个答案:

答案 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){...}

与我的想法类似