Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何知道java中包的类?_Java_Reflection - Fatal编程技术网

如何知道java中包的类?

如何知道java中包的类?,java,reflection,Java,Reflection,可能重复: 假设我有一个包名作为字符串: String pkgName = "com.forat.web.servlets"; 如何知道此软件包中的类型?这在一般情况下是不可能的。如果您的类存储在目录或JAR文件中,您可以查看它的内容,但是类加载器机制非常灵活,“这个包中有哪些类”的问题根本没有意义——可以编写一个类加载器,为您要求的任何类名返回类。这在一般情况下是不可能的。如果您的类存储在目录或JAR文件中,您可以查看其内容,但类加载器机制非常灵活,以至于“此包中有哪些类”的问题根本没有意

可能重复:

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

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

如何知道此软件包中的类型?

这在一般情况下是不可能的。如果您的类存储在目录或JAR文件中,您可以查看它的内容,但是类加载器机制非常灵活,“这个包中有哪些类”的问题根本没有意义——可以编写一个类加载器,为您要求的任何类名返回类。

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

您能提供一些详细信息吗,喜欢什么样的环境?独立应用程序,应用程序服务器中的Web应用程序。从哪里加载类?JAR、文件系统上的独立文件、网络类加载器等

没有简单的答案,因为没有简单的包定义。一个包可以分布在多个JAR、多个类加载器上,对于网络类加载器,这些类存在于另一台机器上

最后,您想只考虑在VM中加载的类或类路径上存在的所有类吗?< /P>


编辑:另请参见此

能否提供更多详细信息,如什么样的环境?独立应用程序,应用程序服务器中的Web应用程序。从哪里加载类?JAR、文件系统上的独立文件、网络类加载器等

没有简单的答案,因为没有简单的包定义。一个包可以分布在多个JAR、多个类加载器上,对于网络类加载器,这些类存在于另一台机器上

最后,您想只考虑在VM中加载的类或类路径上存在的所有类吗?< /P>


编辑:另请参见此

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


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


      如果您有一个.jar文件要从中获取.class文件,可以使用以下方法:

      • java.util.jar.JarEntry

      • java.net.JarURLConnection
        通过
        java创建。​网​URL

      • 本例中的URL是本例中的包名:
        com.forat.web.servlets

      示例

      (注意:忽略异常处理)

      //获取.jar中的“东西”
      枚举项=
      ((JarURLConnection)urlToJar.openConnection()).getJarFile().entries();
      while(jarEntries.hasMoreElements())
      {
      String entry=jarEntries.nextElement().getName();
      if(entry.endsWith(“.class”))
      {
      //TODO:从结果中删除“.”。
      //下面是.servlets位置中的第一个类
      类别名称(条目);
      }
      }
      

      如果您有一个.jar文件要从中获取.class文件,可以使用以下方法:

      • java.util.jar.JarEntry

      • java.net.JarURLConnection
        通过
        java创建。​网​URL

      • 本例中的URL是本例中的包名:
        com.forat.web.servlets

      示例

      (注意:忽略异常处理)

      //获取.jar中的“东西”
      枚举项=
      ((JarURLConnection)urlToJar.openConnection()).getJarFile().entries();
      while(jarEntries.hasMoreElements())
      {
      String entry=jarEntries.nextElement().getName();
      if(entry.endsWith(“.class”))
      {
      //TODO:从结果中删除“.”。
      //下面是.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);
          }
      }