gpt4 book ai didi

java - 如何找到给定类名的包名?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:07:27 24 4
gpt4 key购买 nike

给定一个字符串形式的类名,我如何在运行时获取它的包名?我没有包含包名 + 类名的完全限定名称。只是类名。

我希望在 Class.forName() 方法中使用包名。

我完全可以找到第一个匹配的包名称(如果多个包具有相同的类)。

有什么想法吗?

更新

我没有要处理的类实例。我的要求是使用 Class.forName() 方法创建一个类。但我只是将类名作为字符串。我需要一些方法来遍历包并确定我拥有的类是否属于该包。

异常的堆栈跟踪是

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 - 如何找到给定类名的包名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8742965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com