java中包的名称_按名称递归搜索包中的Java类

是否有一些简单,探索良好的方法来在包中按名称搜索给定的类,并且递归地在此包的所有子包中进行搜索?

即给定现有的类,例如:

> foo.MyClass

> foo.bar.baz.some.more.MyClass

> foo.bar.baz.some.more.OtherClass

我想运行像magicMethod(“foo.bar.baz”,“MyClass”)这样的东西,并获得Class foo.bar.baz.some.more.MyClass作为结果.

显然,手动实现相当容易 – 通过从Package.getPackages()中探索加载的包,过滤任何合适的东西并使用Class.forName(…)在循环中寻找类 – 但可能在标准Java库中存在某些东西或其他一些广泛的库,如Apache Commons,解决这个任务?

解决方法:

这个库的典型用例是寻找像这样实现类的操作:

Set> implementingClasses = new ClassesInPackageScanner()

.findImplementers("com.mypackage.service.impl", MyDiscoverableHelper.class);

或注释类如下:

Set entityClasses = new ClassesInPackageScanner()

.findAnnotatedClasses("com.mypackage.datamodel", javax.persistence.Entity.class);

但是可以通过实现接口并将其传递给扫描仪来交换选择策略.如果你要做的是按名称查找类,代码片段将如下所示:

Set entityClasses = new ClassesInPackageScanner().setResourceNameFilter(new ResourceNameFilter() {

public boolean acceptResourceName(java.lang.String packageName, java.lang.String fileName) {

return fileName.equals("MyClass.class");

}

}).scan("foo");

我刚才写了这个库,因为我从来没有找到过我喜欢的用于探索包的实现.有许多库都有自己的内部API,但我所知道的并没有把它打包成一个漂亮的API.

另外,探索套餐实际上很难做到.它并不像最初看起来那么简单!

标签:java,reflection

来源: https://codeday.me/bug/20190903/1796879.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值