Thomas Darimont
Erfahrenes Mitglied
Hallo,
hier mal ein Beispiel wie man eine Java 8 default method per Reflection aufrufen kann:
Viele Grüße,
Tom
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