【发布时间】:2015-06-25 13:30:01
【问题描述】:
我有一个泛型类型的类。 导入 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 是字符串,那么
clazz = String.class;
arrayClazz = String[].class;
我目前通过创建 T[] 的新实例并读取它的类来解决它。我想知道是否有更好的方法,或者这种方法是否有任何缺点。
更新
我正在尝试做的事情:我有一个从服务器请求 JSON 的通用 DataProvider。我使用 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)
...
}
}
【问题讨论】:
-
你想做什么?为什么要尝试获取数组类型的参数类型?如果您想在某处保留 T 类型元素的集合,为什么不创建一个字段
List<T> list;并实例化它呢?不需要魔法。 :-) -
@SotiriosDelimanolis 我很确定它有效。不是我写的,所以不能分享。
-
@Buurman 我更新了问题以解释我在做什么。希望它能澄清一点。
-
@SotiriosDelimanolis 正确。这就是它的工作原理。你说得对,我应该把我的第一个例子抽象化。我忘记了这一点,因为我试图让它尽可能简单。原来它太简单了;)