【问题标题】:Check if class exists in Java classpath without running its static initializer?检查类是否存在于 Java 类路径中而不运行其静态初始化程序?
【发布时间】:2010-08-12 10:06:09
【问题描述】:

如果我使用

   try {
      Class.forName("my.package.Foo");
      // it exists on the classpath
   } catch(ClassNotFoundException e) {
      // it does not exist on the classpath
   }

“Foo”的静态初始化块被启动。有没有办法在不启动静态初始化程序的情况下确定类“my.package.Foo”是否在类路径中?

【问题讨论】:

    标签: java class classloader


    【解决方案1】:

    尝试ClassforName(String name, boolean initialize, ClassLoader loader)方法,并将参数initialize设置为false

    JavaDoc link

    【讨论】:

    • 应该可以。根据 API:只有当 initialize 参数为 true 并且之前没有初始化过时,才会初始化该类。
    • ClassLoader参数一般应设置为this.getClass().getClassLoader()?
    • 你知道我在谷歌搜索中找到的所有结果,你是唯一一个提到初始化参数的人 - 如果一个人只是测试一个类的存在,对我来说似乎是一件大事(他通常不想加载它),想知道为什么其他人不费心提及它。
    • 与@aliteralmind Java 本身相反sets 这个参数是`Reflection.getCallerClass()`
    • 示例调用 ??
    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多