如何反射性地调用Java 8默认方法 [英] How do I invoke Java 8 default methods reflectively
本文介绍了如何反射性地调用Java 8默认方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
鉴于这个简单的Hello Worldish Java 8接口,如何通过反射调用其hello()方法?
Given this simple "Hello World"ish Java 8 interface, how do I invoke its hello() method via reflection?
public interface Hello {
default String hello() {
return "Hello";
}
}
推荐答案
你可以使用 MethodHandles :
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
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
}
}
这篇关于如何反射性地调用Java 8默认方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文