如何给hashmap getMethod提供参数

时间:2018-12-11 13:16:39

标签: java

我有此代码:

public static Map< String, Method > supplierFunctionMap = new HashMap< String, Method >();
    static
    {
        try {

            supplierFunctionMap.put( "11111-200", SupplierConfiguration.class.getMethod("supplier_X"));
            supplierFunctionMap.put( "11111-210", SupplierConfiguration.class.getMethod("supplier_X"));

        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }

    public static void supplierHasConfig(String supplierNumber) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
    {        

        supplierFunctionMap.get(supplierNumber).invoke(null);  
    }

    public static void supplier_X() throws NotesException{

现在我要做的是以下内容。我想向Supplier_X添加一个额外的参数。例如供应商X(int SupplierNumber)。

现在在上面的代码中,我通过HashMap调用了该方法。如何将这些参数添加到哈希图中?

2 个答案:

答案 0 :(得分:2)

  1. 更改方法的签名以声明所需的参数

    public static void supplier_X(Object arg1, Object arg2) throws NotesException {
    
  2. 调用您的Method传递期望值

    ...
    supplierFunctionMap.get(supplierNumber).invoke(null, new Object(), new Object());
    ...
    

    用您想要传递的实际类型和值替换new Object()

Method.invoke()将要在其上执行方法的对象作为第一个参数(由于方法是null,因此您要传递static)和要传递的参数列表在方法中。

希望有帮助!

编辑:如果要捆绑参数,请创建包装器类以将参数和Method一起存储

class MethodWithParameters {
    private Method method;
    private final List<Object> parameters = new ArrayList<>();

    // get, set
}

并使用此类作为您的Map

的值
Map<String, MethodWithParameters> supplierFunctionMap = new HashMap<>();

答案 1 :(得分:0)

这将帮助您:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

public class Test {
    public static void main(String[] args) {
        supplierHasConfig("11111-210");
    }

    public static Map<String, Method> supplierFunctionMap = new HashMap<String, Method>();

    static {
        try {

            supplierFunctionMap.put("11111-200", Test.class.getMethod("supplier_X", String.class));
            supplierFunctionMap.put("11111-210", Test.class.getMethod("supplier_X", String.class));

        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }

    public static void supplierHasConfig(String supplierNumber) {
        Object[] obj = {"Hi"};
        try {
         supplierFunctionMap.get(supplierNumber).invoke(Test.class.newInstance(), obj);
            } catch (IllegalAccessException | InvocationTargetException |InstantiationException e) {
                e.printStackTrace();
            }
    }

    public static void supplier_X(String param) {
        System.out.println(param);
    }
}