[英]How can I instantiate an interface at runtime?
我有一個只有默認方法的接口。
interface Some {
default void doSome() {
}
}
我正在從中創建某種代理實例。
(Some) getProxy(new Class<?>[]{Some.class}, new Some() {});
現在我想要一些實用的方法來為任何界面做這件事。
有什么好的方法可以做到這一點嗎?
<T> T static proxy(final Class<T> clazz) {
// @@? How can I do `new T(){}` from the class?
}
可以使用java.lang.invoke.MethodHandles
從動態代理 ( java.lang.reflect.Proxy
) 調用默認接口方法。
public interface Some {
default void doSome() {
System.out.println("something...");
}
@SuppressWarnings("unchecked")
static <T> T getProxy(Class<T> clazz) {
return (T) Proxy.newProxyInstance(
clazz.getClassLoader(),
new Class[]{clazz},
(proxy, method, args) -> MethodHandles.lookup()
.in(clazz)
.unreflectSpecial(method, clazz)
.bindTo(proxy)
.invokeWithArguments());
}
public static void main(String[] args) {
Some some = getProxy(Some.class);
some.doSome();
}
}
main
方法打印:
something...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.