是否有任何API,最好是J2SE的一部分(但愿意考虑替代方案),允许操作和解析Java类名称?
例如,给定一个表示类名的String
(例如将传递给ClassLoader
的类,一个从类名中提取包名的API,提取任何内部类名如果存在等等?
我无法从字符串创建Class
个对象然后使用反射方法,因为这是在创建任何类之前发生的 - 这段代码需要解析字符串以决定如何创建{{1首先。因此API需要适用于Class
s。
答案 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>