如何知道在Java包中的类? [重复](How to know the classes of a

2019-10-21 08:25发布

可能重复:
你可以在使用反射包中的所有类?

假设我有一个包名称作为字符串:

String pkgName = "com.forat.web.servlets";

如何知道这个包的类型?

Answer 1:

这是不可能完全通用。 如果你的类存储在目录或JAR文件,你可以看看它的内容,但类加载器机制非常灵活,这个问题:“哪些类此包”根本没有意义 - 它是可以写一个类加载器是返回你问任何类名的类。



Answer 2:

你能否提供一些细节,喜欢什么样的环境? 一个独立的应用程序,在应用程序服务器的web应用程序。 哪里有类从装有? JAR文件,文件系统,网络类加载器等放在单独的文件

有没有简单的答案,只是因为有一个包没有简单的定义。 一个包可以分散在多个罐,多个类加载器,并且在网络类加载器的情况下,这些类另一台机器上存在。

最后,你要只考虑了在虚拟机或者存在的类路径中的所有类加载的类?

编辑:另见本相关的问题。



Answer 3:

这两个答案解释,应该涵盖许多实际问题的方法:

  • 如何通过Java类资源走路吗?
  • 在Java 1.5中类似的东西来的ServiceLoader?


Answer 4:

F你有你想要得到的.class文件从您可以使用下面的一个.jar文件:

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



文章来源: How to know the classes of a package in java? [duplicate]