Java反射
程序员文章站
2024-01-21 14:40:40
...
Java的反射非常强大,传递class, 可以动态的生成该类、取得这个类的所有信息,包括里面的属性、方法以及构造函数等,甚至可以取得其父类或父接口里面的内容。
obj.getClass().getDeclaredMethods();//取得obj类中自己定义的方法, 包括私有的方法。
obj.getClass().getMethods();//取得obj类中自己定义的方法及继承过来的方法, 但私有方法得不到。
同样, 对field也是一样,obj.getClass().getDeclaredFields();取得的是这个类中所有的属性,包括私有的field; 对obj.getClass().getFields();//取得是自己以及接继承来的属性, 但不能取得自己的私有属性。
static Object create(Class clazz) throws Exception {
Constructor con = clazz.getConstructor(String.class);
Object obj = con.newInstance("test name");
return obj;
}
static void invoke1(Object obj, String methodName)
throws IllegalArgumentException, IllegalAccessException,
InvocationTargetException, Exception, NoSuchMethodException {
Method[] ms = obj.getClass().getDeclaredMethods();
ms = obj.getClass().getMethods();
for (Method m : ms) {
// System.out.println(m.getName());
if (methodName.equals(m.getName()))
m.invoke(obj, null);
}
Method m = obj.getClass().getMethod(methodName, null);
m.invoke(obj, null);
}
static void field(Class clazz) throws Exception {
Field[] fs = clazz.getDeclaredFields();
//fs = clazz.getFields();
for (Field f : fs)
System.out.println(f.getName());
}
static void annon(Class clazz) throws Exception {
Annotation[] as = clazz.getAnnotations();
}
上一篇: 工厂模式:静态工厂
下一篇: 1设计模式-工厂模式