我阅读了一篇关于java.öang.reflect的教程,并找到了一种从类中获取方法并使用给定参数调用它的方法:
// general case
template <typename K, typename V>
int Hash<K, V>::hf(const K& key)
{
return key*2654435761;
}
// string case
template <typename V>
int Hash<std::string, V>::hf(const std::string& key)
{
return MurmurHash2(key.c_str(), key.size());
}
这会调用静态方法“method”,它将“parameter-value1”作为唯一参数。
现在它非常整洁,但它没有足够的动态。我想调用一个方法,我只有方法对象,并插入一个未指定数量的参数。假设我有Method method = /*some initialization*/;
Object returnValue = method.invoke(null, "parameter-value1");
和Method method
(用作调用Object[] parameters
的参数)。
是否可以通过使用reflect来编写一个简短的方法来调用具有给定参数的任何方法?如果是这样:如何实现这个目标?
答案 0 :(得分:2)
不,这是不可能的。 可以使用给定的Object[]
作为参数调用方法。但是有一些限制:
幸运的是,这两个都是已知的,感谢Method#getParameterTypes()
:
Class<?>[] parameterTypes = someMethod.getParameterTypes();
int parameterCount = parameterTypes.length;