可能重复:
Can you find all classes in a package using reflection?如何知道java中的包的类?
想我再也包名称作为字符串:
String pkgName = "com.forat.web.servlets";
如何知道这个包的类型?
可能重复:
Can you find all classes in a package using reflection?如何知道java中的包的类?
想我再也包名称作为字符串:
String pkgName = "com.forat.web.servlets";
如何知道这个包的类型?
这是不可能的完全一般性。如果您的类存储在一个目录或JAR文件中,您可以查看它的内容,但类加载器机制非常灵活,以至于“这个包中的类是什么”这个问题根本没有意义 - 可以编写一个类加载器返回任何类的名称,您要求的类。
哦,来吧,它确实有道理,即使这是不可能的总是回答这个问题。 – doublep 2010-04-27 21:00:18
你能提供一些更多的细节,比如什么样的环境?独立应用程序,应用程序服务器中的Web应用程序。类从哪里加载? JAR,文件系统上的单独文件,网络类加载器等。
没有简单的答案,只是因为没有简单的包定义。一个软件包可以分布在多个罐子,多个类别的装载器上,而在网络类装载器的情况下,这些类别存在于另一台机器上。
最后,你想只考虑在虚拟机中加载的类还是类路径中存在的所有类?
编辑:又见这个related question.
这两个答案解释,应该涵盖许多实际问题的方法:
F你有一个.jar文件你想从你的.class文件可以使用以下内容:
java.util.jar.JarEntry
java.net.JarURLConnection
经由java.net.URL
创建。
在这种情况下,URL是在这种情况下,包的名称是:com.forat.web.servlets
例
(注:忽略异常处理)
// Get the "things" that are in the .jar
Enumeration<JarEntry> jarEntries =
((JarURLConnection)urlToJar.openConnection()).getJarFile().entries();
while(jarEntries.hasMoreElements())
{
String entry = jarEntries.nextElement().getName();
if (entry.endsWith(".class"))
{
// TODO: Remove "." from result.
// Here is the first of the classes in the .servlets location
Class.forName(entry);
}
}
http:// stackoverf的副本low.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection(或至少非常接近) – Jonik 2010-04-27 21:00:11