代码之家  ›  专栏  ›  技术社区  ›  GuruKulki

如何知道一个特定的类是否可以被JVM访问?

  •  0
  • GuruKulki  · 技术社区  · 15 年前

    在它抛出一个特定的 ClassNotFoundException 这样我们就可以跳过类访问,并且可以在运行时使用替换类。

    4 回复  |  直到 15 年前
        1
  •  1
  •   PSpeed    15 年前

    没有人提到这一点,因为对于所描述的问题,捕获ClassCastException确实是最好的方法…然而。。。

    如果您所要做的就是检查类路径上是否存在.class文件,那么尝试将类作为资源来获取可能有效。

    URL u = getClass().getResource( "/java/util/List.class" );
    

    不管什么原因,如果类加载器不从可访问的资源中加载它们的类,那么就意味着将找不到该类,但大多数标准的类加载器都会让它工作。我之所以提到它,是因为当它工作时,您还有另外一种能力,即能够准确地看到.class文件在磁盘上的位置。

        2
  •  3
  •   danben    15 年前

    你能出示一些相关的代码吗?如果不知道你到底想做什么,我会说:

    1. 您应该能够确保您引用的所有类都提前在您的类路径上。

    2. 如果必须这样做,您可以在预期的地方捕获ClassNotFound异常,然后使用其他类型重试。

        3
  •  1
  •   marionmaiden    15 年前

    我认为您应该在ClassNotFoundException异常的异常处理程序中实现一个解决方案。

    由于您希望检测类在运行时是否可以访问,因此在执行程序之前无法找到它。

        4
  •  0
  •   stacker    15 年前

    在没有接收到异常的情况下,不可能请求类加载器或调用class.forname(),但如果只在init期间发生这种情况,则不会造成伤害。 唯一的可能是检查文件系统中db jar的类路径。 但这将是太多的工作,几乎没有(或没有)好处。