如果我运行以下程序:
class Runit{
public static void main(String[] argsWut) throws Exception {
String arg = "what?";
Class[] parameters = { new Object().getClass() };
Object[] args = { arg };
System.out.println("".getClass().getMethod("equals",parameters).invoke("what?",args));
}
};
我在命令行上得到以下信息:
true
另一方面,如果我稍微修改一下参数行:
class Runit{
public static void main(String[] argsWut) throws Exception {
String arg = "what?";
Class[] parameters = { arg.getClass() }; // changed a little here so it's a bit more dynamic --
Object[] args = { arg };
System.out.println("".getClass().getMethod("equals",parameters).invoke("what?",args));
}
};
我得到:
Exception in thread "main" java.lang.NoSuchMethodException: java.lang.String.equals(java.lang.String)
at java.lang.Class.getMethod(Class.java:1605)
at test.Runit.main(Runit.java:7)
从这个例子来看,在我看来,该getMethod
方法似乎只适用于精确的参数。有没有办法获得某种形式的“最合适”的方法?例如,如果存在完全匹配,它将返回该方法,但如果不存在完全匹配,它可以返回任何可以接受我给定参数的方法。