我有两个接口(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/