反射泛型相關類問題總結

最近編寫接口的時候使用了反射機制,讀取一個jar包的方法,但該方法使用了不定長參數 Object...,進而關聯到Object[]  因此產生了一些問題,在此進行下總結。


獲取方法泛型問題:

輸入參數是 int nargout, Object... rhs 返回參數是 object[] ,存在同名的重載方法,在執行獲取方法時多次失敗。
cls.getMethod("funtionName",int.class,"空着不知道填什麼");

解決方案:

採用遍歷所有方法,再通過返回值過濾出該方法。

     for (Method method1:methods) {
            if (method1.getName().contains("funtionName")&&(method1.getReturnType()==Object[].class)){
                method=method1;
                break;
            }
        }

在這裏通過debug發現一個有趣的點object...反射在方法內部爲object[],故直接使用object[]也能成功獲取方法。

cls.getMethod("funtionName",int.class,object[].class);

注:object...反射後獲取方法不能爲object.class,必須是object[].class。


輸入泛型問題

其實在採用遍歷之前也嘗試過object[],但在輸出報錯,最後檢查發現是輸入數據問題。向object[]輸入數據多次報錯。

Exception in thread "main" java.lang.IllegalArgumentException: argument type mismatch

解決方案:

應該將原本的泛型輸入改爲object[]的形式,經測試後通過:

 Object outputObj= funtionClass.newInstance();//初始化一個實例

Object[] input=new Object[1];
input[0]=oldinput;

Object output = (Object[]) method.invoke(outputObj, 1, input);

其他說明:

完整demo見下面第一個鏈接,我這裏只是一些補充問題。

問題

1.泛型執行對運行效率的影響

2.泛型的資源回收。


參考文章:

基礎代碼的模板採用了這篇文章的demo  https://www.cnblogs.com/cxchanpin/p/6789166.html

反射相關方法解析 https://blog.csdn.net/lycorisradiata_1/article/details/48493255

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