我正在构建一个具有多个不同软件包的
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().如果程序在安全管理器下运行,这将不起作用.