gpt4 book ai didi

java - 获取泛型类型的数组类

转载 作者:搜寻专家 更新时间:2023-11-01 03:36:07 27 4
gpt4 key购买 nike

我有一个泛型类。导入 java.lang.reflect.Array;

public abstract class MyClass<T> {

private Class<T> clazz;
private Class<?> arrayClazz;

public MyClass() {
clazz = ClassUtils.getParameterizedClass(getClass());
arrayClazz = Array.newInstance(clazz, 0).getClass();
}
}

Utils 方法读取给定类的通用类型,因此我不必将同一个类作为构造函数参数传递。我想要实现的是获取 clazz 的数组类。

例如如果 T 是 String 那么

clazz = String.class;
arrayClazz = String[].class;

我目前通过创建 T[] 的新实例并读取它的类来解决它。我想知道是否有更好的方法或者这种方法是否有任何缺点。

更新

我正在尝试做的事情:我有一个通用的 DataProvider,它从服务器请求 JSON。我使用 GSON 来解析响应。

public abstract class DataProvider<T> {

private final Class<T> resourceClass;
private final Class arrayClass;


protected DataProvider() {
this.resourceRootPath = resourceRootPath;
this.resourceClass = ClassUtils.getParameterizedClass(getClass());
arrayClass = Array.newInstance(resourceClass, 0).getClass();
}

public void get(String id) {
...
T obj = gson.fromJson(response.body().charStream(), resourceClass)
...
}

public void list(String id) {
...
T[] objs = gson.fromJson(response.body().charStream(), arrayClass)
...
}
}

最佳答案

你应该查一下Type Erasure ,这可能会阻止一种干净的方式来做你要求的事情。 (泛型在这里帮不了你。)

问题在于,在 Java 中,泛型类型数据在编译时使用以确保一切看起来都很好……然后 Java 就完全忘记了它。这些类型没有按照您希望的方式编译,它们就这样消失了。

正因为如此,您的方法(我认为!)是最干净的,即使它感觉很老套。您需要实例化一个并使用反射来获取它的类型。

关于java - 获取泛型类型的数组类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31051803/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com