Будь ласка, подивіться на такий код:
Method methodInfo = MyClass.class.getMethod("myMethod");
Це працює, але ім'я методу передається як рядок, тому це буде скомпільовано, навіть якщо myMethod не існує.
З іншого боку, Java 8 вводить функцію посилання на метод. Це перевіряється під час компіляції. Можна скористатися цією функцією, щоб отримати інформацію про метод?
printMethodName(MyClass::myMethod);
Повний приклад:
@FunctionalInterface
private interface Action {
void invoke();
}
private static class MyClass {
public static void myMethod() {
}
}
private static void printMethodName(Action action) {
}
public static void main(String[] args) throws NoSuchMethodException {
// This works, but method name is passed as a string, so this will compile
// even if myMethod does not exist
Method methodInfo = MyClass.class.getMethod("myMethod");
// Here we pass reference to a method. It is somehow possible to
// obtain java.lang.reflect.Method for myMethod inside printMethodName?
printMethodName(MyClass::myMethod);
}
Іншими словами, я хотів би мати код, еквівалентний наступному коду C #:
private static class InnerClass
{
public static void MyMethod()
{
Console.WriteLine("Hello");
}
}
static void PrintMethodName(Action action)
{
// Can I get java.lang.reflect.Method in the same way?
MethodInfo methodInfo = action.GetMethodInfo();
}
static void Main()
{
PrintMethodName(InnerClass.MyMethod);
}