之间有什么区别:
Method getIDMethod = MyInterface.class.getMethod("getId");
和
Method getIDMethod = MyInterface.class.getMethod("getId", new Class<?>[]{});
MyInterface如下:
public interface MyInterface {
AnotherInterface getId();
}
答案 0 :(得分:1)
不,没有区别。在第一种情况下将隐式生成空Class[]
。
The Java Language Specification states
变量arity方法的调用可能包含更多实际值 参数表达式比形式参数。所有的实际论点 表达式与前面的形式参数不对应 将评估变量arity参数并存储结果 到将传递给方法调用的数组中 (§15.12.4.2)。
关于invocation and evaluating arguments
如果使用
m
实际参数表达式调用k ≠ n
,或者m
正在使用k = n
实际参数表达式和类型调用 第k个参数表达式与T[]
的赋值不兼容, 然后将参数列表(e1, ..., en-1, en, ..., ek)
评估为 它写成(e1, ..., en-1, new |T[]| { en, ..., ek })
,其中|T[]|
表示T[]
的删除(第4.6节)。
从技术上讲,它等同于
new Class[]{} // instead of new Class<?>[]{}
答案 1 :(得分:0)
不,这两者之间没有区别,空数组表示方法没有参数
但如果您的方法接受任何参数,则必须使用第二种形式,如
Method getIDMethod = MyInterface.class.getMethod("setId", new Class<?>[]{String.class});
public interface MyInterface {
public void setId(String arg);
}
这里是getMethod
中Class
方法的声明,因为你看到第二个参数是params数组,发送空数组或没有发送任何内容之间没有区别
public Method getMethod(String name, Class<?>... parameterTypes)
throws NoSuchMethodException, SecurityException {
// be very careful not to change the stack depth of this
// checkMemberAccess call for security reasons
// see java.lang.SecurityManager.checkMemberAccess
checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader());
Method method = getMethod0(name, parameterTypes);
if (method == null) {
throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes));
}
return method;
}