Hi, Jochen. -- -------------------- Software Innovation Driver yoonforh at gmail dot com Analyze, Reason, Reshape the Question PGP http://www.javadom.com/personal/yoonforhatgmaildotcom.asc <http://www.javadom.com/personal/yoonforhatgmaildotcom.asc> > 2015. 8. 29., 오후 10:01, Jochen Theodorou <blackd...@gmx.org> 작성: > > Am 29.08.2015 10:56, schrieb Kyung Koo Yoon: >> Hi, all. >> >> The javadoc comment of java.lang.Class.getMethod API has following clause. >> >> @CallerSensitive >> public Method getMethod(String name, Class<?>... parameterTypes) >> throws NoSuchMethodException, SecurityException >> >> >> "The {@code parameterTypes} parameter is an array of {@code Class} >> objects that identify the method's formal parameter types, in declared >> order. If {@code parameterTypes} is {@code null}, it is >> treated as if it were an empty array." >> >> As you know the method signature changed to use varargs since JDK 1.5, >> if parameterTypes is given null, the compiler will interpret the parameter >> with “new Class[] { null }”. > > you are making a wrong assumption here. If null is given there will be > no wrapping in an array. varargs are defined that there is no wrapping > if the given argument type is compatible. For Class[] this is Class[] > and of course null. Even if you had been right, you could still give > produce a call with null by reflection or using the MethodHandles API
You can check by simply decompiling the generated byte codes. vararg is not a JVM feature so the compiler pre-processes and the compiler handles the given null as array’s first element. Originally class.getMethod(“methodName”, null) should have meant a static method, but with vararg, it’s not. > > bye blackdrag > > -- > Jochen "blackdrag" Theodorou > blog: http://blackdragsview.blogspot.com/ > <http://blackdragsview.blogspot.com/>