使用动态代理的 Java 继承 hack

标签 java dynamic reflection aop interceptor

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

相关文章:

java - 如何使用 Spring 和 Java 从 LDAP 获取 userPassword 属性

Java:清除无用对象的内存

c - 程序给出正确答案后释放 C 中的内存时出错

java - 反射 - 在 Java 中动态地将对象转换为其父类(super class)

c# - 无法捕获的异常,第 2 部分

java - 如何使用 chrome 选项启动 chromebrowser?

java - 比较输入文件列表中的数字

android - 多次在 ViewPager 中使用一个 Fragment

dynamic - Sprite Kit 断言失败 : (typeA == b2_dynamicBody || typeB == b2_dynamicBody)

C# 反射 - 获取未知字段的值