我有此代码:
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调用了该方法。如何将这些参数添加到哈希图中?
答案 0 :(得分:2)
更改方法的签名以声明所需的参数
public static void supplier_X(Object arg1, Object arg2) throws NotesException {
调用您的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);
}
}