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...
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...
相关文章推荐
- Python动态类型的学习---引用的理解
- 土人系列AS入门教程 -- 对象篇
- 一个简单的asp数据库操作类
- 在线管理数据库 类
- javascript asp教程第十一课--Application 对象
- c# 类和成员的修饰详细介绍
- 深入c# 类和结构的区别总结详解
- c#结构和类的相关介绍
- VBS ArrayList Class vbs中的数组类
- VBS教程:对象-正则表达式(RegExp)对象
- 大家看了就明白了css样式中类class与标识id选择符的区别小结
- c# 所有类型都从Object类型派生
- sql2008启动代理未将对象应用到实例解决方案
- C# Dynamic关键字之:解析dynamic就是Object
- 深入了解PHP类Class的概念
- 什么是DAO Database Access Object
- C# 泛型的简单理解(安全、集合、方法、约束、继承)分享
- asp提示Server 对象 错误 ASP 0178 : 80070005
- Javascript 对象的解释
- 基于JavaScript 类的使用详解