ReflectTest.javaclass TestClass{
long num;
public long getNum() {
return num;
}
public void setNum(long num) {
this.num = num;
}
}
测试结果:import java.lang.reflect.Method;
public class ReflectTest {
private final int ROUND = 500000;
private TestClass t = new TestClass();
long sum =0;
public long test(int option) {
long beginTime = System.currentTimeMillis();
switch(option)
{
case 1:
System.out.println("Direct test:");
directTest();
break;
case 2:
System.out.println("Standard reflect:");
standardReflect();
break;
case 3:
System.out.println("Cached reflect:");
cachedReflect();
break;
default:
System.out.println("Wrong option!");
}
long endTime = System.currentTimeMillis();
return (endTime-beginTime);
}
private void cachedReflect() {
sum = 0;
try {
Class<?> c = Class.forName("TestClass");
Class<?>[] argType = new Class[1];
argType[0] = long.class;
Method m = c.getMethod("setNum", argType);
for(int i=0;i<ROUND;i++)
{
m.invoke(t, i);
sum += t.getNum();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void standardReflect() {
sum = 0;
for(int i=0;i<ROUND;i++)
{
try {
Class<?> c = Class.forName("TestClass");
Class<?>[] argType = new Class[1];
argType[0] = long.class;
Method m = c.getMethod("setNum", argType);
m.invoke(t, i);
sum += t.getNum();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void directTest()
{
sum = 0;
for(int i=0;i<ROUND;i++)
{
t.setNum(i);
sum += t.getNum();
}
}
public static void main(String[] args) {
ReflectTest t =new ReflectTest();
for(int i=1;i<4;i++)
{
System.out.println(t.test(i));
}
}
}