gpt4 book ai didi

java - 类的通用类型

转载 作者:行者123 更新时间:2023-12-01 06:13:34 26 4
gpt4 key购买 nike

有没有办法在运行时获取以下类的泛型类型(我会在运行时调用doSomething()):

class MyClass<D> extends BaseClass<List<D>> {

public Class<D> getGenericClass(){
Type [] ta = ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments();
Class ty = (Class) ta[0]; // is java.util.List<D> and throws a cast exception

// TODO I want to know what kind of class "D" is
}

}

class BaseClass<T>
T data;
}

我想使用 MyClass如下:

MyClass<Foo> instance = new MyClass<Foo>();
Class<Foo> foo = instance.getGenericClass();

上面的代码行只是为了向您展示我面临的(简化的)场景。如果我手动实例化它,那么我已经知道我正在使用 Foo作为通用参数,但事实并非如此。

仅供引用,我正在尝试处理 Android Parcelable并获取 readParcelable() 的正确类加载器通过使用泛型。具体:MyClass implements Parcelable 。在阅读Parcel时我必须指定一个像这样的类加载器 data = parcel.readArrayList(Foo.class.getClassLoader)我想通过使用像 data = parcel.readArrayList(getGenericClass().getClassLoader()) 这样的反射来动态确定这一点

有没有办法获取此类信息?

通常您只需使用:

Class type = (Class) (getClass().getGenericSuperclass()).getActualTypeArguments()[0]);

但返回java.util.List<D> ,但我对什么感兴趣 <D>是。有没有办法也深入研究该通用类型?

最佳答案

您可以尝试类似的方法(来自 java.lang.reflect 的类):

ParameterizedType pt = (ParameterizedType)MyClass.class.getGenericSuperclass();
Type[] t = pt.getActualTypeArguments();

t 将包含类的每个泛型类型。

编辑:如果它是一个列表,您可以使用类似以下内容来访问列表类型:

ParameterizedType listType = (ParameterizedType) listField.getGenericType();
Class<?> listClass = (Class<?>) listType.getActualTypeArguments()[0];

关于java - 类的通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29725078/

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