在静态方法泛型(Generics in static methods)

2019-07-31 07:18发布

我需要在一个工具类添加一个方法与从JSON字符串解析的东西,并返回一个事物的阵列一些静态方法。

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

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

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

Answer 1:

你需要将它传递。

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

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

在这种情况下,做出是否已在运行时的泛型类型,你必须把它作为一个额外的参数。



Answer 2:

从内存中,这是一个类似的问题,你使用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){...}

这类似于你的,我认为



文章来源: Generics in static methods