把Core Java I Reflection那一节打印下来准备慢慢看支持泛型后的反射机制的用法,却看到
We are not dwelling on this issue because it would further complicate an already abstract concept. For most practical purposes, you can ignore the type parameter and work with the raw Class type.
-,-
好吧,既然都打印出来,还是看完了再说
1. Class.getMethods()方法返回一个Method数组,包括了所有类自身及继承下来的public方法
类似的有getFields() getConstructors()
要访问私有成员,先调用setAccessible(true),这是继承自AccessibleObject类的一个方法。
2. java.lang.reflect.Array
用于动态创建对象数组。
示例代码用于扩大一个任意类型的数组
static Object goodArrayGrow(Object a) {
Class cl = a.getClass();
if (!cl.isArray()) return null;
Class componentType = cl.getComponentType();
int length = Array.getLength(a);
int newLength = length * 11 / 10 + 10;
Object newArray = Array.newInstance(componentType, newLength);
System.arraycopy(a, 0, newArray, 0, length);
return newArray;
}
int[] a = {1, 2, 3, 4};
a = (int[]) goodArrayGrow(a);
这样也是正确的,因为返回值是Object,因此可以转型为int[]
3. NB的东东-方法指针
正如Field类有get方法,Method类也有invoke方法。
Object invoke(Object obj, Object... args)
第一个参数必须有,如果是静态方法,该参数为null。
假设m1代表Employee类的getName方法,下面的代码就调用了这个方法
String n = (String) m1.invoke(harry); //harry is a Employee
如果返回值是基本类型,Java通过autoboxing返回它们的wrapper类。
要获得Method类,可以从getdeclaredMethods方法的返回值中找到,也可以使用getMethod方法
Mathod getMethod(String name, Class... parameterTypes)
如要从Employee类中获得raiseSalary(double)这个方法
Method m2 = Employee.class.getMethod("raiseSalary", double.class);