2010-04-27 86 views

回答

3

这是不可能的完全一般性。如果您的类存储在一个目录或JAR文件中,您可以查看它的内容,但类加载器机制非常灵活,以至于“这个包中的类是什么”这个问题根本没有意义 - 可以编写一个类加载器返回任何类的名称,您要求的类。

+5

哦,来吧,它确实有道理,即使这是不可能的总是回答这个问题。 – doublep 2010-04-27 21:00:18

1

你能提供一些更多的细节,比如什么样的环境?独立应用程序,应用程序服务器中的Web应用程序。类从哪里加载? JAR,文件系统上的单独文件,网络类加载器等。

没有简单的答案,只是因为没有简单的包定义。一个软件包可以分布在多个罐子,多个类别的装载器上,而在网络类装载器的情况下,这些类别存在于另一台机器上。

最后,你想只考虑在虚拟机中加载的类还是类路径中存在的所有类?

编辑:又见这个related question.

0

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); 
    } 
} 

相关问题