+-

将类名称作为字符串,如何在运行时获取它的包名?我没有包名称类名的完全限定名称.只是类名.
我希望在Class.forName()方法中使用包名.
找到第一个匹配的包名称(如果多个包具有相同的类),我完全没问题.
有任何想法吗?
UPDATE
我没有要处理的类实例.我的要求是使用Class.forName()方法创建一个Class.但我只是将类名作为字符串.我需要一些方法来循环包,并确定我所属的类是否属于该包.
异常的堆栈跟踪是
Exception in thread "main" java.lang.ClassNotFoundException: MyAddressBookPage
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
最佳答案
这很可能是一种非常低效,臃肿,不方便的方式来做你想要实现的目标,并且希望已经有一种开箱即用的单一方式来做到这一点……但它应该有效.
基本上,扫描类路径中的每个类,直到找到getSimpleName()与您拥有的类名匹配的类.
我建议查看Google Classpath Explorer以帮助管理这样做的具体细节.
它可能看起来像这样:
ClassPath classpath = new ClassPathFactory().createFromJVM();
RegExpResourceFilter regExpResourceFilter = new RegExpResourceFilter(".*", ".*\\.class");
String[] resources = classpath.findResources("", regExpResourceFilter);
resources是一个字符串数组,如’com / foo / bar / Baz.class’.你现在可以简单地遍历并找到匹配的条目,并将它们从斜线转换为点线,去掉’.class’等.在尝试匹配内部类时要小心,因为它们中将包含’$’字符.
另外,据我所知,这不会导致加载这些类.
点击查看更多相关文章
转载注明原文:java – 如何找到给出类名的包名? - 乐贴网