1. 程式人生 > >關於java中method.invoked 傳入型別不一樣的問題

關於java中method.invoked 傳入型別不一樣的問題

關於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下,應該不會對型別進行辨別和拆箱

在這裡插入圖片描述

上面改為如下

在這裡插入圖片描述

  • 執行成功
  • 在這裡插入圖片描述