gpt4 book ai didi

java - 如何以反射方式调用 Java 8 默认方法

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:14 26 4
gpt4 key购买 nike

给定这个简单的“Hello World”式 Java 8 接口(interface),我如何通过反射调用它的 hello() 方法?

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 - 如何以反射方式调用 Java 8 默认方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22614746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com