Is it possible to invoke a private static method with MethodUtils
?
LocalDateTime d = (LocalDateTime)MethodUtils.invokeStaticMethod(Service.class, "getNightStart", LocalTime.of(0, 0), LocalTime.of(8,0));
This code throws the exception:
java.lang.NoSuchMethodException: No such accessible method: getNightStart()
If I change method’s access modifier to public
it works.
Advertisement
Answer
No, because MethodUtils.invokeStaticMethod()
calls Class.getMethod()
under the hood. Even if you try to hack the modifier it won’t be visible to the MethodUtils
as it won’t see the modified Method
reference:
Service.class .getDeclaredMethod("getNightStart", LocalTime.class, LocalTime.class) .setAccessible(true); MethodUtils.invokeStaticMethod(Service.class, "getNightStart", LocalTime.of(0, 0), LocalTime.of(8, 0));
will still fail with NoSuchMethodException
just like plain reflection:
Service.class .getDeclaredMethod("getNightStart", LocalTime.class, LocalTime.class) .setAccessible(true); Method m = Service.class.getMethod("getNightStart", LocalTime.class, LocalTime.class); m.invoke(null, LocalTime.of(0, 0), LocalTime.of(8, 0));
This will only work when the Method
object is reused:
Method m = Service.class.getDeclaredMethod("getNightStart", LocalTime.class, LocalTime.class); m.setAccessible(true); m.invoke(null, LocalTime.of(0, 0), LocalTime.of(8, 0));