來自:ZiWenXiejava
連接:https://www.ziwenxie.site/2017/03/22/java-reflection/設計模式
前言ui
Java反射機制是一個很是強大的功能,在不少大型項目好比Spring, Mybatis中均可以看見反射的身影。經過反射機制咱們能夠在運行期間獲取對象的類型信息,利用這一特性咱們能夠實現工廠模式和代理模式等設計模式,同時也能夠解決Java泛型擦除等使人苦惱的問題。本文咱們就從實際應用的角度出發,來應用一下Java的反射機制。spa
p.s: 本文須要讀者對反射機制的API有必定程度的瞭解,若是以前沒有接觸過的話,建議先看一下官方文檔的Quick Start。設計
在應用反射機制以前,首先咱們先來看一下如何獲取一個對象對應的反射類Class
,在Java中咱們有三種方法能夠獲取一個對象的反射類。代理
在Java中,每個Object
都有一個getClass()
方法,經過getClass方法咱們能夠獲取到這個對象對應的反射類:code
/** * 經過getClass獲取反射類 * Created by zhangyhk on 2017/5/24. */ public class getClassTest { public static void main(String[] args) { Student s =new Student(); Class<?> c = s.getClass(); } }
經過forName方法對象
咱們也能夠調用Class
類的靜態方法forName()
:文檔
/** * 經過forName方法獲取反射類 * Created by zhangyhk on 2017/5/24. */ public class forNameTest { public static void main(String[] args) { try { Class<?> c = Class.forName("www.westinfo.reflect.Student"); System.out.println(c); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
使用.classget
或者咱們也能夠直接使用.class
:
Class<?> c = String.class; |