是否有任何API,最好J2SE(但願意考慮替代方案)的一部分,它允許Java類名操縱和分析?Java類和包名操作
例如,給定表示一個類名稱(例如,把將被傳遞給一個ClassLoader
,一個API來從一個類名稱提取包名稱,如果存在的話提取任何內部類名等一個String
?
我不能創建一個從字符串Class
對象,然後利用反射的方法,因爲這是在創建任何類之前,所有發生的事情 - 這個代碼需要解析字符串來決定如何在第一時間創建Class
所以。 API需要在String
的工作。
是否有任何API,最好J2SE(但願意考慮替代方案)的一部分,它允許Java類名操縱和分析?Java類和包名操作
例如,給定表示一個類名稱(例如,把將被傳遞給一個ClassLoader
,一個API來從一個類名稱提取包名稱,如果存在的話提取任何內部類名等一個String
?
我不能創建一個從字符串Class
對象,然後利用反射的方法,因爲這是在創建任何類之前,所有發生的事情 - 這個代碼需要解析字符串來決定如何在第一時間創建Class
所以。 API需要在String
的工作。
添加這一點,因爲它已經有一段時間而且我也沒有預見到任何新的答案:我不相信J2SE中有任何API可以讓您分析字符串類名稱。這不是太難,你自己寫的,事情就是這樣的包名稱格式在語言規範中定義並不太可能改變(即,.他們不會開始使用時間比其他的東西來分隔包名)。
聽起來像你描述什麼是什麼是commonl被稱爲「反思」。
有許多在java.lang.Class
方法,你可以工作:
Class inner = Class.forName("my.package.TopLevel$Inner");
Class topLevel = inner.getDeclaringClass();
Class[] allInner = topLevel.getDeclaredClasses();
Class anonymous = Class.forName("my.package.TopLevel$Inner$2");
Class stringArray = Class.forName("[Ljava.lang.String;");
Package pkg = topLevel.getPackage();
對不起,我可能是不明確的 - 我有一個代表的類名字符串和我要分析這些,作爲執行(例如)一個ClassLoader的一部分。所以我絕對沒有Class對象。 – BeeOnRope
立即看到上面邁克爾·布魯爾 - 戴維斯的回答我的意見。 – BeeOnRope