1、反射的好處是:可以在運行時確認對象以及方法。
2、下面舉個簡單的例子來說下反射的運用場景:
假如一款游戲有一個配置文件,配置文件里有個renderType設置了游戲啟動時調用哪個RenderHandler來渲染游戲,
(RenderHandler:一個接口,有一個render方法,HighRenderHandler、LowRenderHandler、MiddleRenderHandler等一共10個實現類)
那么游戲啟動時必須獲得一個RenderHandler來渲染游戲,現在有兩種方式,一種是使用switch判斷
1 //首先獲得配置文件里的renderType 2 switch(renderType){ 3 case "low":renderHandler=new LowRenderHandler(); 4 case "high":renderHandler=new HighRenderHandler(); 5 case "middle":renderHandler=new MiddleRenderHandler(); 6 case "a":renderHandler=new ARenderHandler(); 7 case "b":renderHandler=new BRenderHandler(); 8 case "c":renderHandler=new CRenderHandler(); 9 case "d":renderHandler=new DRenderHandler(); 10 case "e":renderHandler=new ERenderHandler(); 11 case "f":renderHandler=new FRenderHandler(); 12 case "g":renderHandler=new GRenderHandler(); 13 default:renderHandler=new LowRenderHandler(); 14 } 15 renderHandler.render();
另一種是使用反射:
1 //首先從配置文件里獲得renderType 2 RendeHandler renderHandler=(RendeHandler)Class.forName(rederType).newInstance(); 3 renderHandler.render();
3、switch用了14行代碼,而反射只使用了2行代碼,現實中可能見不到這么傻的例子,但是這確實有助於理解反射。