Java反射機制

近期項目需求,添加google的admob廣告的時候發現有倆個版本。早期的版本已經發出,需要新版更新時會有衝突。所以想到了Java反射機制。

例一、

java代碼:

mAdmobView = new AdView((Activity) mContext, AdSize.BANNER,
					getAdmobKey());
			mLinearLayout.addView(mAdmobView);

反射代碼:

mAdmobViewClass = Class.forName("com.google.ads.AdView");

			Class<?> adSizeClass = Class.forName("com.google.ads.AdSize");
			Field bannerField = adSizeClass.getDeclaredField("BANNER");
			bannerField.setAccessible(true);
			Object bannerFieldObject = bannerField.get(adSizeClass);

			mAdmobView = mAdmobViewClass.getConstructor(Activity.class,
					adSizeClass, String.class).newInstance(mContext,
					bannerFieldObject, getAdmobKey());

1、先獲取AdView類

2、初始化AdSize

3、獲取AdView對象。getContructor(Activity.class,adSizeClass,String.class),參數爲構造函數的參數類型。newInstance(mContext,bannerFieldObject,getAdmobKey())參數內容爲構造參數的數據。


例二、

Java代碼:

mAdmobRequest = new AdRequest();
mAdmobView.loadAd(mAdmobRequest);

反射代碼:

Class<?> AdRequest = Class.forName("com.google.ads.AdRequest");
			Object mAdmobRequest = AdRequest.getConstructor().newInstance();

			Method loadAd = mAdmobViewClass.getMethod("loadAd",
					Class.forName("com.google.ads.AdRequest"));
			loadAd.invoke(mAdmobView, mAdmobRequest);

1、先獲得AdRequest的實例,getConstructor()的參數爲構造函數的參數類型,newInstance()的參數爲構造函數的參數數據。

2、調用函數用類對象的函數名可以直接獲取。

3、invoke調用函數。mAdmobView是object類型的AdView的對象。


好了,就總結這些吧。

還有可以參考這位大神的,很全面。看看吧:

click here!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章