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で配列を返すメソッドはプライベートにできますか?
- 3. ネストされたクラスは、Rubyの外部クラスのメソッドにどのようにアクセスできますか?
- 4. 別のクラスでプライベート変数にアクセスできるようにするインターフェイスを提供できますか?
- 5. ObjectクラスのtoString()メソッドはどのようにjavaでコンパイルされますか?
- 6. javaオブジェクトをJavaで呼び出されるGroovyメソッドに渡すにはどうすればよいですか?
- 7. Groovy Script Engineで渡されたクラスのスーパークラスの変数にどのようにアクセスしますか?
- 8. DLLはどのようにしてEXEクラスにアクセスできますか?
- 9. 保護されていないメソッドは、関係のないクラスでどのようにアクセスできますか?
- 10. 別のクラスの1つのクラスオブジェクトにどのようにアクセスできますか?
- 11. BitmapImageクラスのgetPixelメソッドはどのように使用できますか?
- 12. このGroovy JSONオブジェクトに一般的にどのようにアクセスしますか?
- 13. マルチパラメータ設定のためのGroovy setterショートカットにはどのようにアクセスできますか?
- 14. GroovyでTestNGのクラスのインスタンスにアクセス
- 15. どのようにして、プロパティークラスはJavaの '親'クラスのメソッドを呼び出すことができますか?
- 16. Eclipseで同じプロジェクトのJavaクラスでGroovy変数にアクセスできない
- 17. ルビー:どのように私は、モジュール内のメソッドにアクセスすることができます>モジュール>クラス
- 18. 抽象クラス内にネストされたクラスのメソッドにアクセスするにはどうすればよいですか?
- 19. メソッドを他のクラスにしかアクセスできないようにする
- 20. ASMの匿名クラスにアクセスしているかどうかはどのように確認できますか?
- 21. Groovyのプロパティまたはメソッドへのアクセス
- 22. 別のものを拡張するPHPクラスはどのようにプライベート関数を継承できますか?
- 23. Javaのスタブ・プライベート・メソッド
- 24. クラスのプライベート変数にアクセスするC++
- 25. javascriptクラス内のメソッドにアクセスする方法は?ネストされたクラス内からメソッドにアクセスしようとし
- 26. Javaのenumの型とサブタイプにどのようにアクセスできますか?
- 27. TraCIDemo11pのRSUにはどのようにアクセスできますか?
- 28. gridIndexのコンテンツにはどのようにアクセスできますか
- 29. クラスはJavaの別のクラスで定義されたメソッドをどのように使用しますか?
- 30. 派生クラスのメソッドを外部にプライベートにするが、es6のベースクラスに到達できるようにする
反射を利用しています。 – Henry