利用java反射機制繞過編譯時的類型檢查

思路:

可以使用集合來定義數(shù)組,利用反射獲取類中指定的方法,
而Method類中的invoke()允許調(diào)用包裝在當前method對象中的方法
因此可以直接調(diào)用add方法添加字符串元素

invoke(Object obj, Object... args)
參數(shù):obj - 從中調(diào)用底層方法的對象
     args - 用于方法調(diào)用的參數(shù) 
返回:使用參數(shù) args在obj上指派該對象所表示方法的結(jié)果

代碼:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
/**
 * 利用反射可以繞過一些編譯時的類型檢查
 * 比如在integer數(shù)組中加入一個字符串
 * @author: Joker
 * @date: 2017年1月30日 下午8:15:22
 */
public class ReflectDemo
{
    public static void main(String[] args)
    {
        // 創(chuàng)建類型為Interger的ArrayList集合
        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        //add方法給list集合中添加元素
        arrayList.add(101);
        arrayList.add(100);
        arrayList.add(102);

        //獲取字節(jié)碼文件對象
        Class arrayListClass = ArrayList.class;

        try
        {//利用getMethod(String name, Object obj)獲取ArrayList類中指定的add方法  
            Method method = arrayListClass.getMethod("add", Object.class);
        //直接調(diào)用add方法添加字符串元素,返回add方法執(zhí)行后的結(jié)果
            method.invoke(arrayList, "helloworld");

        }
        catch (NoSuchMethodException | SecurityException e)
        {
            e.printStackTrace();
        }
        catch (IllegalAccessException e)
        {
            e.printStackTrace();
        }
        catch (IllegalArgumentException e)
        {
            e.printStackTrace();
        }
        catch (InvocationTargetException e)
        {
            e.printStackTrace();
        }

        System.out.println("新集合為:" + arrayList);

    }
}

控制臺輸出:

新集合為:[101, 100, 102, helloworld]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.在C/C++中實現(xiàn)本地方法 生成C/C++頭文件之后,你就需要寫頭文件對應(yīng)的本地方法。注意:所有的本地方法的第...
    JayQiu閱讀 2,527評論 0 3
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,637評論 18 399
  • Jni數(shù)據(jù)類型 Jni方法 來自 http://blog.chinaunix.net/uid-22028680-i...
    FlyDragonInSky閱讀 1,003評論 0 0
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,041評論 0 9
  • 最近一段時間感覺讀書越來越少,每天上下班,地鐵上聽這本書。 給我最大的感受就是: 感恩你所吃的和喝的 再一次說明了...
    顯梅阿卡西記錄閱讀 335評論 0 1

友情鏈接更多精彩內(nèi)容