クラスにアクセサーを提供するのが良いか悪いかに関わらず、リフレクションを介してオブジェクトの特定の属性へのアクセスを実行すると、パフォーマンス(メモリ消費または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));
}
}
}
結果は次のとおりです。
皆さん、ありがとうございました。