ごく最近、リフレクション API に出会いました。驚いたことに、プライベート変数にアクセスして変更することもできます。次のコードを試しました
import java.lang.reflect.Field;
public class SomeClass{
private String name = "John";
}
public class Test{
public static void main(String args[]) throws Exception {
SomeClass myClass = new SomeClass();
Field fs = myClass.getClass().getDeclaredField("name");
fs.setAccessible(true);
System.out.println("Variable is " + fs.getName() + " and value is "
+ fs.get(myClass));
fs.set(myClass, "Sam");
System.out.println("Variable is " + fs.getName() + " and value is "
+ fs.get(myClass));
}
}
そして、次の出力を得ました。
Variable is name and value is John
Variable is name and value is Sam
Java はオブジェクト指向言語であり、その主な機能はデータ カプセル化、継承、ポリモーフィズムなどです。リフレクション API は、データ カプセル化の目的そのものを変えていませんか? Reflection API を使用する必要があるのはなぜですか? テスト目的で使用できるサイトをいくつか読みましたが、モジュールはテストされており、JUnitテストケースを使用して簡単に実行できます。では、なぜこのようなハックがあるのか、誰か説明できますか?