我有2个接口
public interface A{
public void sayHello();
}
public interface B extends A{
}
我有一个实现接口A的类,让我们说:
public class AImpl implements A{
public void sayHello(){
System.out.println("Hello");
}
}
现在我想使用AImpl为接口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实例时,我遇到了类转换异常。
答案 0 :(得分:1)
您尚未将B
定义为代理的界面。将其添加到Class[]
。