您的位置:首页 > 移动开发 > Objective-C

getGenericSuperclass,getSuperclass

2013-11-11 11:31 381 查看
1.Class<? super T> getSuperclass():返回本类的父类

2.Type getGenericSuperclass():返回本类的父类,包含泛型参数信息

package basedao.test;  

  

import java.lang.reflect.ParameterizedType;  

  

//import java.lang.reflect.Type;  

  

public abstract class SuperClass<T> {  

  

    private Class<T> clazz;  

  

    @SuppressWarnings("unchecked")  

    public SuperClass() {  

        clazz = (Class<T>) ((ParameterizedType) super.getClass()  

                .getGenericSuperclass()).getActualTypeArguments()[0];  

    }  

  

    public Class<T> getClazz() {  

        return clazz;  

    }  

  

    public void setClazz(Class<T> clazz) {  

        this.clazz = clazz;  

    }  

  

    /** 

     * 普通的非泛型类Class 

     * 泛型化的类Class<T> 

     * JDK中,普通的Class.newInstance()方法的定义返回Object,要将该返回类型强制转换为另一种类型; 

     * 但是使用泛型的Class<T>,Class.newInstance()方法具有一个特定的返回类型; 

     * @param args 

     */  

    public static void main(String[] args) {  

        SuperClass<Person> superClass = new SubClass();  

System.out.println(supserClass.getSupserclass);//得到父类

        //1.得到泛型类T实际的完整类名  

        System.out.println(superClass.getClazz());  

        //2.得到泛型类T的对象  

        try {  

            System.out.println(superClass.getClazz().newInstance());  

        } catch (InstantiationException e) {  

            e.printStackTrace();  

        } catch (IllegalAccessException e) {  

            e.printStackTrace();  

        }  

        //3.调用泛型类T的方法  

        try {  

            superClass.getClazz().newInstance().function();  

        } catch (InstantiationException e) {  

            e.printStackTrace();  

        } catch (IllegalAccessException e) {  

            e.printStackTrace();  

        }  

    }  

}  

  

class SubClass extends SuperClass<Person> {  

  

    public SubClass() {  

        super();  

    }  

  

}  

  

class Person {  

    public Person() {  

        super();  

    }  

  

    public void function() {  

        Syste
a7f6
m.out.println("function in Person.class...");  

    }  

}  

Java代码  



  

Java代码  



输出结果:  

Java代码  



class basedao.test.Person  

basedao.test.Person@10d448  

function in Person.class...  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  泛型 object 对象 class