Groovyは、Javaクラスのプライベート・メソッドおよび変数にアクセスできます。 Groovyはこれをシーンの背後でどのようにしていますか? MethodHandle
クラスで使用されているinvokedynamic
バイトコード命令の使用によるものですか?私はJavaがprivate
メソッドを呼び出すためのinvokespecial
命令を使用し、アクセス修飾子を尊重するpublic
のためのinvokevirtual
を使用すると思いますか?GroovyはJavaクラスのプライベート・メソッドにどのようにアクセスできますか?
2
A
答えて
2
GroovyはJavaで書かれているので、バイトコードに直接依存しないようにしてください。Reflection APIを使用しないでください。
詳細については、java.lang.reflect
のソースコードを確認してください。これで、シーンの背後にあるReflection APIの使用方法がわかります。
1
あなたはリフレクションを使用して、とにかくJavaでこれを行うことができ、例えば、このメソッドはプライベート静的フィールドの値を設定します...
public static void setStaticField(Class<?> clazz, String fieldName, Object value) {
try {
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(null, value);
} catch (Exception ex) {
throw new IllegalArgumentException("Could not set field '" + fieldName + "' of type '" + clazz.getName() + "' to: " + value, ex);
}
}
お知らせfield.setAccessible(true)
これは、することによって防止することができます適切なSecurity Managerポリシーが設定されている必要があります。 How to restrict developers to use reflection to access private methods and constructors in Java?
+1
はい、Javaではリフレクションを使用できますが、groovyはどうしますか? groovyも反射を使用していますか? – boring
関連する問題
- 1. 親クラスのプライベート変数にどのようにアクセスできますか?
- 2. javaのmain()メソッドからnon-staticクラスにアクセスできますか?
- 3. Javaで配列を返すメソッドはプライベートにできますか?
- 4. ネストされたクラスは、Rubyの外部クラスのメソッドにどのようにアクセスできますか?
- 5. 別のクラスでプライベート変数にアクセスできるようにするインターフェイスを提供できますか?
- 6. Pythonの別のクラスに存在するメソッドからあるクラスのプライベート静的変数にアクセスするにはどうすればよいですか?
- 7. ObjectクラスのtoString()メソッドはどのようにjavaでコンパイルされますか?
- 8. javaオブジェクトをJavaで呼び出されるGroovyメソッドに渡すにはどうすればよいですか?
- 9. Groovy Script Engineで渡されたクラスのスーパークラスの変数にどのようにアクセスしますか?
- 10. DLLはどのようにしてEXEクラスにアクセスできますか?
- 11. BootstrapTableのdataFormatメソッドでどのようにしてpropsにアクセスできますか
- 12. 保護されていないメソッドは、関係のないクラスでどのようにアクセスできますか?
- 13. 別のクラスの1つのクラスオブジェクトにどのようにアクセスできますか?
- 14. BitmapImageクラスのgetPixelメソッドはどのように使用できますか?
- 15. どのようにして、プロパティークラスはJavaの '親'クラスのメソッドを呼び出すことができますか?
- 16. このGroovy JSONオブジェクトに一般的にどのようにアクセスしますか?
- 17. クラスのインスタンスが別のクラスのメソッドにアクセスできるかどうかを確認するにはどうすればよいですか?
- 18. マルチパラメータ設定のためのGroovy setterショートカットにはどのようにアクセスできますか?
- 19. ルビー:どのように私は、モジュール内のメソッドにアクセスすることができます>モジュール>クラス
- 20. 抽象クラス内にネストされたクラスのメソッドにアクセスするにはどうすればよいですか?
- 21. ASMの匿名クラスにアクセスしているかどうかはどのように確認できますか?
- 22. GroovyでTestNGのクラスのインスタンスにアクセス
- 23. メソッドを他のクラスにしかアクセスできないようにする
- 24. Eclipseで同じプロジェクトのJavaクラスでGroovy変数にアクセスできない
- 25. どのようにJavaメソッド
- 26. 別のものを拡張するPHPクラスはどのようにプライベート関数を継承できますか?
- 27. Javaのenumの型とサブタイプにどのようにアクセスできますか?
- 28. Javaのスタブ・プライベート・メソッド
- 29. TraCIDemo11pのRSUにはどのようにアクセスできますか?
- 30. gridIndexのコンテンツにはどのようにアクセスできますか
反射を利用しています。 – Henry