`
deepinmind
  • 浏览: 451587 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
1dc14e59-7bdf-33ab-841a-02d087aed982
Java函数式编程
浏览量:41632
社区版块
存档分类
最新评论

让Java的反射更得简单

阅读更多

反射对Java开发人员来说是最强大的功能之一了。标准的Java API真的很难使用,尤其是搜索和查询某些特殊的方法的时候。

比如说,我最近在参与的一个项目,要取出一个类的所有返回string,不带参数的,且以to开头的public方法,写出来的代码大概像下面这样:


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这个库可以让这样工作变得想当简单。同样的查询用它来写的话会是这样的:


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/   


原创文章转载请注明出处:http://it.deepinmind.com

英文原文链接
3
1
分享到:
评论
2 楼 deepinmind 2014-05-26  
shyboy0358 写道
LZ说的reflections库是JDK的标准库吗,还是第三方的啊


不是标准库,这是个第三方库~
1 楼 shyboy0358 2014-05-25  
LZ说的reflections库是JDK的标准库吗,还是第三方的啊

相关推荐

Global site tag (gtag.js) - Google Analytics