<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
</dependency>
反射对Java开发人员来说是最强大的功能之一了。标准的Java API真的很难使用,尤其是搜索和查询某些特殊的方法的时候。
比如说,我最近在参与的一个项目,要取出一个类的所有返回string,不带参数的,且以to开头的public方法,写出来的代码大概像下面这样:
1
2
3
4
5
6
7
8
9
|
ArrayList<Method> results =
new
ArrayList<Method>();
for
(Method m : String.
class
.getDeclaredMethods()) {
if
(Modifier.isPublic(m.getModifiers()) &&
m.getReturnType().equals(String.
class
) &&
m.getParameterCount() ==
0
&&
m.getName().startsWith(
"to"
)) {
results.add(m);
}
}
|
因此你可以想像一下,如果有比这还复杂的情况,这段代码最后会成什么样。我找了一遍后发现Reflections这个库可以让这样工作变得想当简单。同样的查询用它来写的话会是这样的:
1
2
3
4
5
|
Set<Method> results = getMethods(String.
class
,
withModifier(Modifier.PUBLIC),
withReturnType(String.
class
),
withParametersCount(
0
),
withPrefix(
"to"
));
|
有个这个库还能进行一些更为复杂的查询。想了解关于它的更多信息的话,它的官方文档是个不错的选择。希望将来你考虑在Java中进行一些反射相关的操作的话会考虑使用一下这个库。
下下面有些相关的资料链接:
https://github.com/ronmamo/reflections
http://docs.oracle.com/javase/tutorial/reflect/