リフレクションを使用するときに注意する必要がある潜在的な問題は何ですか。 私は反射で非常に混乱しています、なぜjavaはプライベートデータメンバーにアクセスするためにこのタイプの機能性を提供しますか?プライベートはプライベートなのですが、なぜリフレクションを使用してプライベートメソッドにアクセスするための機能を提供するのですか?
プライベート: 私は、それが宣言されている唯一のクラスがそれを見ることができると思いたいよう。
なぜ他のクラスのプライベートなものにアクセスできるのですか? この用語(リフレクション)は、私のプライベート(アクセス指定子)プロパティの概念をJavaで完全にオーバーフローします。
このトピックに関する多くのリンクを訪問しましたが、このトピックに関する完全な説明はありません。 例:
package example;
import java.lang.reflect.Method;
class A{
private void privateMethod(){
System.out.println("hello privateMethod()");
}
}
class B{
public static void main(String[] args) throws Exception {
A d = new A();
Method m = A.class.getDeclaredMethod("privateMethod");
m.setAccessible(true);
m.invoke(d);
}
}
このアプローチのシナリオについて詳しく説明してください。 他のクラスのプライベートメソッドのアクセシビリティの利点と欠点が必要ですか?
http://stackoverflow.com/questions/1239581/why-is-it-allowed-to-access-java-private-fields-via-reflection –
ほとんどの通常のプロジェクトでは、反射は必要ありません。単にあなたのアーキテクチャについて再考する必要があります(もちろん例外があります)。私は定期的に反射を使用する1つの場所ですが、UnitTestsにあります。 UnitTestのリフレクションを使用してプライベートフィールドを変更するだけで、複数のシナリオを試すことができます。たとえばブール値です。ブール値設定があり、UnitTestの両方のシナリオをテストしたいとします。プロジェクトのデフォルトはfalseなので、最初にテストします。そして、リフレクションを使って(一時的に)それを真にして、もう一方のシナリオをテストします。 –
どのような例で説明できますか?それは私のコンセプトについて非常に明確になるからです。 –