NutzCN Logo
问答 Android 环境下使用动态代理报错
发布于 3071天前 作者 TuWei1992 2183 次浏览 复制 上一个帖子 下一个帖子
标签:

代码如下:
```java
public class VideoProcessEngineProxy implements InvocationHandler {
private Object tar;

//绑定委托对象,并返回代理类
public Object bind(Object tar) {
    this.tar = tar;
    return Proxy.newProxyInstance(
            tar.getClass().getClassLoader(),
            tar.getClass().getInterfaces(),
            this);
}

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    Object result = method.invoke(tar, args);
    System.out.println("VideoProcessEngineProxy:" + method.getName() + ", " + result);
    return result;
}

public static VideoProcessEngine createVideoProcessEngine(String mInputPath,
                                                          SurfaceHolder mSurface,
                                                          Context context) {
    VideoProcessEngine _ins = VideoProcessEngine.createVideoProcessEngine(mInputPath, mSurface, context);

    VideoProcessEngineProxy proxy = new VideoProcessEngineProxy();
    return (VideoProcessEngine) proxy.bind(_ins);
}

}

`` 调用createVideoProcessEngine方法时, 报java.lang.ClassCastException: $Proxy3 cannot be cast toVideoProcessEngine`
啥情况?

5 回复
return (VideoProcessEngine) proxy.bind(_ins);

// 而proxy.bind返回的是
return Proxy.newProxyInstance(
            tar.getClass().getClassLoader(),
            tar.getClass().getInterfaces(),
            this);

// Proxy.newProxyInstance返回的实例只实现"tar.getClass().getInterfaces()", 并没有不会继承VideoProcessEngine, 不报错才怪

VideoProcessEngine 没有实现任何接口, 是不是就没法代理这个类了?

是的, 必须有接口

添加回复
请先登陆
回到顶部