Reflections讓Java的反射更得簡單



      <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/


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com