【问题标题】:checking whether a package is existent or not检查包是否存在
【发布时间】:2010-03-31 03:10:51
【问题描述】:

如何检查 javax.servlet.* 之类的包是否存在于我的 java 安装中?

【问题讨论】:

  • 简单方法:导入包,使用,编译。

标签: java reflection


【解决方案1】:

Java 只能告诉你它是否可以加载一个类。它不能告诉你一个包是否存在,因为包没有被加载,只有类。

唯一的方法是尝试从该包中加载一个类。例如,对于 javax.servlet.* 你可以这样做:

try {
    Class.forName("javax.servlet.Filter");
    return true;
} catch(Exception e) {
    return false;
}

【讨论】:

    【解决方案2】:

    检查包是否作为资源存在:

    // Null means the package is absent
    getClass().getClassLoader().getResource("javax/servlet");
    

    或者,检查这个包的某些类是否可以通过Class.forName(...)加载。

    【讨论】:

    • 请注意,这不适用于 JDK 9+,其中包被封装在模块中。但是,类没有被封装,所以下面的工作:getClass().getClassLoader().getResource("java/lang/String.class")
    【解决方案3】:

    如果您在 API 文档中查看您的安装,它会告诉您所有已安装的包,例如:http://java.sun.com/j2se/1.5.0/docs/api/

    在代码中,你可以这样做:

    Package foo = Package.getPackage("javax.servlet");
    
    if(null != foo){
      foo.toString();
    }else{
      System.out.println("Doesn't Exist");
    }
    

    【讨论】:

    • 这仅适用于之前从该包中加载过的类。
    • 只有当该包中的类已被 ClassLoader 加载时,这才有效。
    • 哇,不知道。谢谢大家!
    猜你喜欢
    • 2014-06-17
    • 1970-01-01
    • 2011-01-16
    • 2011-02-12
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2015-10-18
    • 2018-09-10
    相关资源
    最近更新 更多