java 反射

本文详细介绍了如何使用Java反射API获取类的构造方法,并通过代码示例展示了如何遍历并打印这些构造方法的参数类型。此外,文章还涵盖了如何获取类的接口、超类以及递归获取类的超类等高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面我们来看一下如何获取反射类中的构造方法

public static void printConstructors(Object r) {

Class c = r.getClass();
// 获取指定类的类名
String className = c.getName();
try {
// 获取指定类的构造方法
Constructor[] theConstructors = c.getConstructors();
for (int i = 0; i < theConstructors.length; i++) {
// 获取指定构造方法的参数的集合
Class[] parameterTypes = theConstructors[i].getParameterTypes();


System.out.print(className + "(");


for (int j = 0; j < parameterTypes.length; j++)
System.out.print(parameterTypes[j].getName() + " ");


System.out.println(")");


}
} catch (Exception e) {
e.printStackTrace();
}
}

获取反射类的接口

public static void printInterfaceNames(Object o) {  
Class c = o.getClass();  
//获取反射类的接口  
Class[] theInterfaces = c.getInterfaces();  
for(int i=0; i<theInterfaces.length; i++)  
System.out.println(theInterfaces[i].getName());  
//获取反射类的父类(超类)  
Class theSuperclass = c.getSuperclass();  
System.out.println(theSuperclass.getName());  

获取反射类的超类(递归方法)

private void getSuperClass(Object o,List list){
Class c = o.getClass();
String obj=c.getName();
if(!"java.lang.Object".equals(obj)){
Class theSuperclass = c.getSuperclass();
list.add(obj);
getSuperClass(theSuperclass,list);
}

}

   field.setAccessible(true);//设置访问私有属性的方法

 Class clas = null;
try {
clas = Class.forName(list.get(i).toString());
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
Field[] fields = clas.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);//设置访问私有属性的方法
String key = field.getName();
Object value = null;
try {
value = field.get(obj);
} catch (Exception e) {
e.printStackTrace();
}
if (!"".equals(value) && value != null) {
if (value instanceof String) {
typeObj.setString(key, (String) value);
} else if (value instanceof Boolean) {
typeObj.setBoolean(key, (Boolean) value);
} else if (value instanceof Double) {
typeObj.setDouble(key, (Double) value);
} else if (value instanceof IDfId) {
typeObj.setId(key, (IDfId) value);
} else if (value instanceof Integer) {
typeObj.setInt(key, (Integer) value);
} else if (value instanceof IDfTime) {
typeObj.setTime(key, (IDfTime) value);
} else if (value instanceof IDfValue) {
typeObj.setValue(key, (IDfValue) value);
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值