无论在类中提供访问器是好的还是坏的OO实践,我都想知道通过反射执行对对象特定属性的访问是否会降低性能(内存消耗或cpu时间)。
您是否实施了这一点并执行了基准测试?你知道有谁做过这样的基准测试吗?
编辑:
由于一些评论表明性能下降很明显,我修改了问题的标题以表明我想知道使用反射实现访问器的影响有多严重。
编辑:
感谢您的友好评论和回答。根据@Peter Lawrey 的回答和@EJP 的友好评论,这就是我的意思,并且想知道你们中是否有人在我提出问题之前已经实施:
package co.com.prueba.reflection;
import java.lang.reflect.Field;
public class A {
private String s;
public void setS(String s){
this.s=s;
}
public String getS(){
return this.s;
}
public static void main(String[] args) throws IllegalAccessException, NoSuchFieldException {
System.out.println("Invoking .setAccesible(true) ...");
A secondA = new A();
for(int i=0; i<10; i++){
long start = System.nanoTime();
Field f = secondA.getClass().getDeclaredField("s");
f.setAccessible(true);
f.get(secondA);
long end = System.nanoTime();
System.out.println((end - start));
}
System.out.println("Without invoking .setAccesible(true) ...");
A firstA = new A();
for(int i=0; i<10; i++){
long start = System.nanoTime();
Field f = firstA.getClass().getDeclaredField("s");
f.get(firstA);
long end = System.nanoTime();
System.out.println((end - start));
}
System.out.println("Invoking the getter ...");
A thirdA = new A();
for(int i=0; i<10; i++){
long start = System.nanoTime();
thirdA.getS();
long end = System.nanoTime();
System.out.println((end - start));
}
}
}
结果如下:
谢谢你们。