zoukankan      html  css  js  c++  java
  • (ParameterizedType) getClass().getGenericSuperclass().getActualTypeArguments()[0]得到的是什么?

    这种写法一般都会在基类中看到,而且是使用了JAVA泛型的,比如我们J2EE中的BaseDAO什么的,请看代码,其实简写了,分开写就明了了。

    基类

    import java.lang.reflect.ParameterizedType;
    import java.lang.reflect.Type;
    
    public abstract class SuperClass<T> {
    
        private Class<T> beanClass;
    
        @SuppressWarnings("unchecked")
        public SuperClass() {
            super();
            ParameterizedType parameterizedType =  (ParameterizedType) getClass().getGenericSuperclass();
            Type[] types = parameterizedType.getActualTypeArguments();
            beanClass = (Class<T>) types[0];
        }
    
        public Class<T> getBeanClass() {
            return beanClass;
        }
    
        public void setBeanClass(Class<T> beanClass) {
            this.beanClass = beanClass;
        }
        
        public static void main(String[] args) {
            SuperClass<Cat> superClass = new SubClass();
            System.out.println(superClass.getBeanClass());
        }
        
    }

    子类

    public class SubClass extends SuperClass<Cat> {
        
        public SubClass() {
            super();
        }
        
    }
    
    class Cat {
    
        public Cat() {
            super();
        }
    }

    运行SuperClass后控制台会打印:

    class com.stos.test.generic.Cat


    看到运行结果你可能就清楚了,就是获取实际的泛型类。

  • 相关阅读:
    luogu P1144 最短路计数
    codevs 1006 等差数列
    luogu P2419 [USACO08JAN]牛大赛Cow Contest
    luogu cogs 选数
    luogu P1186玛丽卡
    leetcode[69]Sqrt(x)
    leetcode[70]Climbing Stairs
    leetcode[71]Simplify Path
    leetcode[72]Edit Distance
    leetcode[73]Set Matrix Zeroes
  • 原文地址:https://www.cnblogs.com/flytogalaxy/p/6909978.html
Copyright © 2011-2022 走看看