Wie bekomme ich die MethodInfo einer Java 8 Methodenreferenz?

Bitte haben Sie einen Blick auf den folgenden code:

Method methodInfo = MyClass.class.getMethod("myMethod");

Dies funktioniert, aber den Namen der Methode als Zeichenfolge übergeben wird, so wird diese kompilieren auch wenn myMethod nicht vorhanden.

Auf der anderen Seite, Java 8 stellt eine Methode Funktion Verweis. Es wird überprüft, zum Zeitpunkt der Kompilierung. Es ist möglich, verwenden Sie diese Funktion, um die Methode get info?

printMethodName(MyClass::myMethod);

Vollständigen Beispiel:

@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);
}

In anderen Worten, ich würde gerne ein code-was ist das äquivalent zu der folgenden C# - code:

    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);
    }

InformationsquelleAutor der Frage Rafal | 2013-11-07

Schreibe einen Kommentar