Groovy可以訪問Java類的私有方法和變量。 Groovy如何在現場做這件事?是否因爲使用invokedynamic
字節碼指令而被MethodHandle
類使用?我認爲Java使用invokespecial
指令呼叫private
方法和invokevirtual
爲public
權利,尊重訪問修飾符?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)
這可以通過防止安裝適當的安全管理員策略。請參閱How to restrict developers to use reflection to access private methods and constructors in Java?
+1
是的,在Java中我可以使用反射,但groovy怎麼做? Groovy是否也使用反射? – boring
相關問題
- 1. AccountManagerService:如何訪問其私有方法
- 2. 訪問私有類中的私有方法
- 3. Java - 包私有類中的方法可訪問性?
- 4. Groovy調用Java超類的私有方法
- 5. 訪問JS私有方法
- 6. 私有方法可訪問
- 7. Groovy中的Utility類的訪問方法
- 8. 無法使用Reflection API訪問java中的私有方法
- 9. 子類訪問父類的私有方法?
- 10. 無法訪問靜態方法中的私有類成員?
- 11. 通過javascript中的私有方法訪問私有變量
- 12. Java EE 6中的@Remote是否可以訪問私有方法?
- 13. 訪問私有變量的Java靜態方法
- 14. 訪問私有內部類中重寫的方法與私有構造
- 15. 無法正常訪問私有類型
- 16. 訪問私有方法字段
- 17. 在C中訪問私有方法#
- 18. 無法從類內部訪問私有方法?
- 19. Rspec私有方法無法訪問類實例變量?
- 20. Groovy - 如何替換現有Java類的方法
- 21. 訪問來自繼承類的私有方法在python
- 22. 調用Parent方法並訪問父類中的私有變量?
- 23. 從同一類的不同實例訪問私有方法
- 24. 如何訪問私有方法內的對象?
- 25. 在.NET中,如何限制對私有方法的訪問?
- 26. 如何自動刪除私有字段和方法的Java類
- 27. 如何讓方法訪問其他模板類實例的私有成員?
- 28. 稱爲超類方法的Groovy類,用於訪問關閉
- 29. 對包 - 私有作品的Java默認類訪問如公開
- 30. 如何訪問Groovy中的Java原型int類型?
它使用反射。 – Henry