随笔-java反射
/**
* 获取class的 包括父类的
* @param type
* @return
*/
public static Field[] getClassFields(Class<?> clazz) {
List<Field> list = new ArrayList<Field>();
Field[] fields;
do{
fields = clazz.getDeclaredFields();
for(int i = 0;i<fields.length;i++){
list.add(fields[i]);
}
clazz = clazz.getSuperclass();
}while(clazz!= Object.class&&clazz!=null);
return list.toArray(fields);
}
/**
* 获取方法
* @param name
* @param pojoClass
* @return
* @throws Exception
*/
public static Method getMethod(String name, Class<?> pojoClass)
throws Exception {
StringBuffer getMethodName = new StringBuffer("get");
getMethodName.append(name.substring(0, 1).toUpperCase());
getMethodName.append(name.substring(1));
//方法名字,目标对象的Class
return pojoClass.getMethod(getMethodName.toString(),new Class[]{});
}
/**
* 是不是java基础类
* @param field
* @return
*/
public static boolean isJavaClass(Field field) {
Class<?> fieldType = field.getType();
boolean isBaseClass = false;
if(fieldType.isArray()){
isBaseClass = false;
}else if (fieldType.isPrimitive()||fieldType.getPackage()==null
|| fieldType.getPackage().getName().equals("java.lang")
|| fieldType.getPackage().getName().equals("java.math")
|| fieldType.getPackage().getName().equals("java.util")) {
isBaseClass = true;
}
return isBaseClass;
}
运用:
public static void reflectField(String filed,Object obj,Class clazz){
try {
Method method=Reflect.getMethod(filed,clazz);
//Method的调用 ( 那个对象的方法,传什么参)
String name=(String) method.invoke(obj, new Object[]{});
System.out.println(name);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws ClassNotFoundException {
TSStudent stu=new TSStudent();
stu.setName("xuliangjun");
stu.setId("1");
stu.setSex("女");
stu.setClassName("一年级");
// Class clazz=stu.getClass();
// Field[] fs=clazz.getDeclaredFields();
Field[] fs=getClassFields(stu.getClass());
for(Field f:fs){
Reflect.reflectField(f.getName(),stu,stu.getClass());
}
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。