+-
java – 如何找到给出类名的包名?
将类名称作为字符串,如何在运行时获取它的包名?我没有包名称类名的完全限定名称.只是类名.

我希望在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 – 如何找到给出类名的包名? - 乐贴网