關於java中method.invoked 傳入型別不一樣的問題
阿新 • • 發佈:2018-12-08
關於java中method.invoked 傳入型別不一樣的問題
前言
- 最近在嘗試寫著自己的一些框架,其中遇到了一個比較麻煩的問題,就是mvc中,獲取前端傳來的引數後,需要辨別型別,一一對應傳給method呼叫invoke方法,但是。其中invoke需要傳入改方法對應類的class以及引數,object陣列。當方法的傳入引數都是string型別的時候沒有任何的問題,但是,當其中一個為Integer型別的時候就會報錯。然後自己另外寫了點方法測試一下。
測試
package Test; import java.io.File; import java.net.URL; import java.util.ArrayList; import java.util.List; public class TestMethod { public String string1 = "11111"; public String string2 = "22222"; public String string3 = "33333"; public Integer integer1 = 111; public void setString1(String string1,String string2,String string3,Integer integer1) { System.out.println("進入 setString1"); this.string1 = string1; this.string2 = string2; this.string3 = string3; this.integer1 = integer1; System.out.println("this.string1 :" + this.string1); System.out.println("this.string2 :" + this.string2); System.out.println("this.string3 :" + this.string3); System.out.println("this.integer1 :" + this.integer1); } }
package TestMain; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import java.util.ArrayList; import java.util.List; import Test.TestMethod; public class Main { public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException{ Class<?> clzz = Class.forName("Test.TestMethod"); clzz.getMethods(); Object[] objects = new Object[4]; TestMethod tsMethod = new TestMethod(); for(Method method : clzz.getMethods()){ System.out.println(">>>>>>>method.getParameterCount()" + method.getParameterCount()); objects[0] = "1"; objects[1] = "2"; objects[2] = "3"; objects[3] = "1"; System.out.println("method name " + method.getName()); if("setString1".equals(method.getName())) method.invoke(clzz.newInstance(),objects); } } }
- 測試結果如下,報錯
- 原因應該是在invoke下,應該不會對型別進行辨別和拆箱
上面改為如下
- 執行成功