Java 8 Default Method per Reflection aufrufen

Thomas Darimont

Erfahrenes Mitglied
Hallo,

hier mal ein Beispiel wie man eine Java 8 default method per Reflection aufrufen kann:
Java:
package de.thomasdarimont.labs;

import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
* @author Thomas Darimont
*/
public class ReflectiveDefaultMethodCallExample {

    static interface Hello {
        default String hello() {
            return "Hello";
        }
    }

    public static void main(String[] args) throws Throwable{

        Hello target =
                //new Hello(){};
                (Hello)Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),new Class[]{Hello.class}, (Object proxy, Method method, Object[] arguments) -> null);
        Method method = Hello.class.getMethod("hello");

        Object result = MethodHandles.lookup()
                                    .in(method.getDeclaringClass())
                                    .unreflectSpecial(method,method.getDeclaringClass())
                                    .bindTo(target)
                                    .invokeWithArguments();
      
        System.out.println(result); //Hello
    }
}

Viele Grüße,
Tom
 
Zurück