不久前我有一个类似的问题当使用 Class.getMethod 和自动装箱时,在您自己的查找算法中实现它是有意义的。但真正让我有点困惑的是以下内容也不起作用:
public class TestClass
{
public String doSomething(Serializable s)
{
return s.toString();
}
public static void main(String[] args) throws SecurityException, NoSuchMethodException
{
TestClass tc = new TestClass();
Method m = tc.getClass().getMethod("doSomething", String.class);
}
}
String.class 实现了 Serialized 接口,我真的希望它能够包含在查找方法中。 我是否也必须在自己的查找算法中考虑这一点?
EDIT:我确实读过Javadoc,所以让我强调问题的第二部分:如果是这样,您对如何快速做到这一点有什么建议吗(我已经必须添加一些自定义匹配和转换算法,我不希望它变得太慢)?
根据您的编辑,您可以使用Class#isAssignableFrom()。这是一个基本的启动示例(将明显的(运行时)异常处理放在一边):
package com.stackoverflow.q2169497;
import java.io.Serializable;
import java.lang.reflect.Method;
public class Test {
public String doSomething(Serializable serializable) {
return serializable.toString();
}
public static void main(String[] args) throws Exception {
Test test = new Test();
for (Method method : test.getClass().getMethods()) {
if ("doSomething".equals(method.getName())) {
if (method.getParameterTypes()[0].isAssignableFrom(String.class)) {
System.out.println(method.invoke(test, "foo"));
}
}
}
}
}
这应该打印foo
到标准输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)