gpt4 book ai didi

使用动态代理的 Java 继承 hack

转载 作者:行者123 更新时间:2023-11-29 05:18:43 25 4
gpt4 key购买 nike

我有两个接口(interface)

public interface A{
public void sayHello();
}

public interface B extends A{
}

我有 1 个实现接口(interface) A 的类,比方说:

public class AImpl implements A{

public void sayHello(){
System.out.println("Hello");

}

}

现在我想使用 AImpl 为接口(interface) B 实现一个动态代理对象。我可以这样做吗?

我用下面的代码试了一下

InvocationHandler handler = new MyInvocationHandler(<AImplInstance>);
B b= (B) Proxy.newProxyInstance(
A.class.getClassLoader(),
new Class[]{A.class},
handler);
b.sayHello();

我的调用处理程序是:

public class MyInvocationHandler implements InvocationHandler{

private A aImpl;


public MyInvocationHandler(A aImpl){
this.aImpl= aImpl;
}


@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return method.invoke(aImpl, args);
}
}

我在将代理实例类型转换为 B 实例时遇到类转换异常。

最佳答案

您还没有将 B 定义为代理的接口(interface)。将其添加到 Class[]

关于使用动态代理的 Java 继承 hack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25593609/

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