Ric*_*lor 2 java arrays reflection equals
我正在编写一个例程来调用方法,这些方法由一个名称和一组参数Class值找到
通过getName匹配方法是有效的,但是当尝试匹配参数的给定Class []和Method.getParameterTypes()时,我遇到了麻烦.
我认为这样可行:
Class[] searchParams = new Class[] { float.class, String.class };
Class[] methodParams = m.getParameterTypes();
if(methodParams == searchParams) {
m.invoke(this, paramValues);
}
但显然不是 - 永远不会到达m.invoke.我已经检查了,methodParams提供了与searchParams相同的类.
下面的代码工作,并选择正确的方法,但它似乎是一种非常肮脏的做事方式,我敢肯定我错过了一些明显的东西.
Class[] searchParams = new Class[] { float.class, String.class };
Class[] methodParams = m.getParameterTypes();
boolean isMatch = true;
for(int i = 0; i < searchParams.length; i++) {
if(!searchParams.getClass().equals(methodParams.getClass())) {
isMatch = false;
}
}
if(isMatch) {
m.invoke(this, paramValues);
}
数组是对象,而不是基元.==
仅使用on对象来比较它们是否指向相同的引用,而您实际上想要分别比较每个单独的数组项.
你想用Arrays#equals()
它.
if (Arrays.equals(methodParams, searchParams)) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
60 次 |
最近记录: |