加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java反射 – 获取包的列表

发布时间:2020-12-14 17:46:32 所属栏目:Java 来源:网络整理
导读:我正在构建一个具有多个不同软件包的 Java应用程序.我想能够以编程方式告诉应用程序中以特定的预修复开始的哪些程序包.有没有用Java反射API来做到这一点?我没有看到像这样的反射apis这样的东西. 例: com.app.controls.textcom.app.controls.pickercom.app.
我正在构建一个具有多个不同软件包的 Java应用程序.我想能够以编程方式告诉应用程序中以特定的预修复开始的哪些程序包.有没有用Java反射API来做到这一点?我没有看到像这样的反射apis这样的东西.

例:

com.app.controls.text
com.app.controls.picker
com.app.controls.date
etc

我想通过了解前缀“com.app.controls”来枚举所有这些,并了解将来可能会集成一个新的包.

谢谢!

解决方法

您可以通过使用 Package.getPackages()来执行此操作,该选项返回当前类加载器已知的所有包的数组.您必须手动循环访问数组,并使用 getName()找到具有相应前缀的数组.

以下是一个简单的例子:

public List<String> findPackageNamesStartingWith(String prefix) {
    List<String> result = new ArrayList<>();
    for(Package p : Package.getPackages()) {
        if (p.getName().startsWith(prefix)) {
           result.add(p.getName());
        }
    }
    return result;
}

请注意,此技术仅返回当前类加载器中定义的包.如果您需要来自不同类加载器的软件包,则有一些选项:

>安排事情,以便程序可以从该类加载器内部运行上述代码.这需要您的代码库的某个组织,这可能或可能不可行.
>使用反射来调用相应类加载器上的(通常被保护的)方法getPackages().如果程序在安全管理器下运行,这将不起作用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读