我有一個jar文件,我可以列出jar中的所有課程。 jar中的類可以是public,protected或者package作用域。我想知道是否可以告訴範圍並且只列出公開課?以編程方式列出所有公開課程
1
A
回答
1
你可以這樣做,我能想到的不止一種方法如何做到這一點,這裏有兩個:
您可以使用一個字節碼操作工具讀取
.class
文件並獲得修改。缺點是你需要一個額外的庫。好處在於這種方式非常安全,因爲您不需要將該類加載到VM中,只需將其加載到內存中,因此不會執行代碼,並且如果類依賴於不可用的類,則這種方式會仍然工作。您可以使用
ClassLoader
與此.jar
並加載每個類,然後使用反射檢查它。好處是你不需要任何第三方庫。缺點是爲了檢查這些類,它們需要由ClassLoader
加載,這意味着這些類的代碼(靜態初始化器)將被執行。如果這是不可信的第三方代碼,您需要首先安裝SecurityManager
以沙箱這些類。另一個缺點是,如果這些類依賴於其他不可用的類(例如擴展這些不可用的類),這種方法將失敗。
0
如果您已經在罐子上市的類,你可以使用反射界面的名稱(字符串),以獲得這些類的Class對象,然後使用Class界面來確定的屬性類,例如isPublic,isFinal或isStatic。
快速搜索發現:
http://tutorials.jenkov.com/java-reflection/classes.html#modifiers
相關問題
- 1. 以編程方式列出安裝日期的所有程序
- 2. 以編程方式列出所有黃瓜方案?
- 3. 如何以編程方式在ABAP中列出所有表格?
- 4. 如何以編程方式列出Rails的所有控制器
- 5. 在SharePoint 2010中以編程方式列出所有調查?
- 6. 以編程方式打開radlistpicker彈出
- 7. 如何公開第三方課程?
- 8. 以編程方式檢索所有運輸方式的列表
- 9. 爲什麼我的公開課並沒有公開其他課程中的公開方法?
- 10. 如何以編程方式列出解決方案中的所有項目?
- 11. Parse.com以編程方式向課程添加一行
- 12. 列出所有wi-fi SSID編程方式在iphone
- 13. 以編程方式訪問通過JMX公開的MessageHandlers
- 14. 以編程方式填充所有歌曲的列表?
- 15. 以編程方式關閉所有ui-select下拉列表?
- 16. 以編程方式獲取所有數據庫列類型
- 17. 如何在公共課程中轉移「非公開」方法
- 18. 如何列出應用程序公開的所有活動?
- 19. 如何在Linux中以編程方式列出所有SSL/TLS證書?
- 20. 以編程方式遞歸列出eclipse工作區中的所有文件
- 21. 將「公開課」整合爲「公開課」
- 22. 以編程方式在所有應用程序中滾動
- 23. 如何以編程方式更新所有應用程序
- 24. 以編程方式本地化我的所有應用程序
- 25. 以編程方式從回調中以編程方式開始下載在IE
- 26. 以便攜式方式以編程方式打開文檔
- 27. 以編程方式更改所選ListBoxItem
- 28. 爲多個項目公開課程
- 29. 以編程方式向列添加列
- 30. 以編程方式打開collapsible div
當然這是可能的。例如,您可以使用https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html加載類,並使用反射使修飾符https://docs.oracle.com /javase/7/docs/api/java/lang/Class.html#getModifiers()。你有一些代碼了嗎? – superbob
類只有_public_和_package_作用域。 –
@AndriyKryvtsun類可以有保護作用域:'public class Foo {protected static class Bar {} protected class Buzz {}}'這個問題有什麼問題呢,它們也可以有私有作用域:'public class Foo {private static class Bar {}私人課Buzz {}}'。 –