Here you can find the source of invoke(Object obj, String methodName, Object... params)
public static Object invoke(Object obj, String methodName, Object... params)
//package com.java2s; /*// ww w . j av a 2 s .co m * Copyright 2008 Whohoo Licensed under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable * law or agreed to in writing, software distributed under the License is * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the specific * language governing permissions and limitations under the License. */ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Main { public static Object invoke(Object obj, String methodName, Object... params) { if (params.length % 2 != 0) { throw new RuntimeException("types and values mismatch"); } try { int size = params.length / 2; Class<?>[] types = new Class<?>[size]; Object[] args = new Object[size]; for (int i = 0; i < types.length; i++) { int idx = (i * 2); types[i] = (Class<?>) params[idx]; args[i] = params[idx + 1]; } Method method = obj.getClass().getMethod(methodName, types); Object ret = method.invoke(obj, args); return ret; } catch (NoSuchMethodException e) { throw new RuntimeException(e); } catch (SecurityException e) { throw new RuntimeException(e); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (IllegalArgumentException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } } }