【发布时间】:2012-02-03 07:18:49
【问题描述】:
给定一个类名作为字符串,我如何在运行时获取它的包名?我没有包名+类名的完全限定名。只是类名。
我希望在Class.forName() 方法中使用包名。
我可以找到第一个匹配的包名(如果多个包具有相同的类)。
有什么想法吗?
更新
我没有要处理的 Class 实例。我的要求是使用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)
【问题讨论】:
-
您不需要 Class.forName 的类实例来工作。阅读我的答案中的 cmets
-
你为什么要投票给所有人?我们只是想提供帮助。如果每个人都给出了相似的答案,那么这意味着您无法很好地描述您的问题,并且首先是您的错。..
-
您在类名与完全限定类名方面的意思的示例可能有助于消除混淆,例如“我只有‘Baz’,没有‘com.foo.bar.Baz’。
-
@Cemre,不是他,是我。我投票给他们是因为他们没有回答他的问题。不要把它当作个人! :) 一旦将它们编辑为有用的答案,我将返回并删除不再适用的反对票。但目前,它们只是不好的答案。这就是我们从没有答案到网络上最佳答案的旅程开始的方式。再说一次,不要把它当作个人。
-
抱歉造成误会。看到我已经很低的声誉下降有点吓人。 @Grundlefleck 感谢您的回复。 ;)
标签: java class reflection package