((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]相关的知识,希望对你有一定的参考价值。

这个方法这么用啊,返回什么,请给一个具体的例子
谢谢哈

参考技术A getClass().getGenericSuperclass()返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type

然后将其转换ParameterizedType。。

getActualTypeArguments()返回表示此类型实际类型参数的 Type 对象的数组。
[0]就是这个数组中第一个了。。

简而言之就是获得超类的泛型参数的实际类型。。

比如
超类
public class GenericDAO<T>
private Class<T> entityClass;
protected GenericDAO()
Type type = getClass().getGenericSuperclass();
Type trueType = ((ParameterizedType) type).getActualTypeArguments()[0];
this.entityClass = (Class<T>) trueType;


子类
public class OptionManager extends GenericDAO<MSGC_OPTION>


测试类
public class OracleTest
public static void main(String[] args) throws Exception
OptionManager manager = new OptionManager();


这样在你new OptionManager();以后
超类里的entityClass就是子类那里的public class OptionManager extends GenericDAO<MSGC_OPTION> 里面的MSGC_OPTION所对应的class对象了..本回答被提问者和网友采纳

ParameterizedType

 

   private static class ParameterizedTypeTest<T extends Number> {
        private List<T> list = null;

        public static void main(String[] args) throws NoSuchFieldException {
            testTypeVariable();
        }

        private Map.Entry<String, Integer> map = null;

        private static void getGetActualTypeArguments() throws NoSuchFieldException {
            Field fieldMap = ParameterizedTypeTest.class.getDeclaredField("map");
            ParameterizedType typeMap = (ParameterizedType) fieldMap.getGenericType();
            System.out.println(typeMap.getActualTypeArguments()[0]);
            System.out.println(typeMap.getActualTypeArguments()[1]);
            System.out.println(typeMap.getRawType());
            System.out.println(typeMap.getOwnerType());
        }

        private List<String>[] t;

        private static void testGenericArrayType() throws NoSuchFieldException {
            Field fieldArray = ParameterizedTypeTest.class.getDeclaredField("t");
            GenericArrayType typeArray = (GenericArrayType) fieldArray.getGenericType();
            System.out.println(typeArray.getClass().getName());
            System.out.println(typeArray.getGenericComponentType());
        }

        private List<T> t1;
        private T t2;

        private static void testTypeVariable() throws NoSuchFieldException {
            Field field = ParameterizedTypeTest.class.getDeclaredField("t1");
            ParameterizedType type = (ParameterizedType) field.getGenericType();
            System.out.println(type.getActualTypeArguments()[0].getClass().getName());

            Field field2 = ParameterizedTypeTest.class.getDeclaredField("t2");
            TypeVariable type2 = (TypeVariable) field2.getGenericType();
            System.out.println(type2.getBounds()[0]);
        }

    }

 

以上是关于((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]的主要内容,如果未能解决你的问题,请参考以下文章

ParameterizedType

ParameterizedType类的使用

GenericDAO 与 Guice,玩泛型和 ParameterizedType

类型转换错误解决方案reflect.ParameterizedType

类的TypeVariable和变量的ParameterizedType

parameterizedType.getActualTypeArguments()[0]是什么意思?