Java类和包名称操作

时间:2011-06-29 02:12:26

标签: java api parsing package

是否有任何API,最好是J2SE的一部分(但愿意考虑替代方案),允许操作和解析Java类名称?

例如,给定一个表示类名的String(例如将传递给ClassLoader的类,一个从类名中提取包名的API,提取任何内部类名如果存在等等?

我无法从字符串创建Class个对象然后使用反射方法,因为这是在创建任何类之前发生的 - 这段代码需要解析字符串以决定如何创建{{1首先。因此API需要适用于Class s。

3 个答案:

答案 0 :(得分:3)

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();

答案 1 :(得分:1)

听起来就像你所描述的那样,通常被称为“反思”。

答案 2 :(得分:0)

添加这个,因为它已经有一段时间了,我没有预料到任何新答案:我不相信J2SE中有任何API可以解析字符串类名。编写自己的东西并不难,包名称格式之类的东西在语言规范中定义并且不太可能改变(即,它们不会开始使用除句点名称之外的其他内容来分隔包名称。) / p>