Java反射機制是壹個非常強大的功能,在很多大型項目比如Spring,Mybatis都可以看見反射的身影。通過反射機制我們可以在運行期間獲取對象的類型信息,利用這壹特性我們可以實現工廠模式和代理模式等設計模式,同時也可以解決Java泛型擦除等令人苦惱的問題。下面java課程就從實際應用的角度出發,來應用壹下Java的反射機制。
反射基礎
p.s:本文需要讀者對反射機制的API有壹定程度的了解,如果之前沒有接觸過的話,建議先看壹下官方文檔的QuickStart。
在應用反射機制之前,首先我們先來看壹下如何獲取壹個對象對應的反射類Class,在Java中我們有三種方法可以獲取壹個對象的反射類。
通過getClass方法
在Java中,每壹個Object都有壹個getClass方法,通過getClass方法我們可以獲取到這個對象對應的反射類:
Strings="ziwenxie";
Class<?>c=s.getClass();
通過forName方法
我們也可以調用Class類的靜態方法forName:
Class<?>c=Class.forName("java.lang.String");
使用.class
或者我們也可以直接使用.class:
Class<?>c=String.class;
獲取類型信息
在文章開頭我們就提到反射的壹大好處就是可以允許我們在運行期間獲取對象的類型信息,下面我們通過壹個例子來具體看壹下。
首先我們在typeinfo.interfacea包下面新建壹個接口A:
packagetypeinfo.interfacea;
publicinterfaceA{voidf();}
接著我們在typeinfo.packageaccess包下面新建壹個接口C,接口C繼承自接口A,並且我們還另外創建了幾個用於測試的方法,註意下面幾個方法的權限都是不同的。