Java 动态代理Object对象转为接口报错问题

public interface Subject {
	public void shopping();
}
public class Person implements Subject{

    @Override
    public void shopping() {
        System.out.println("Pay for the good!");
    }
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


public class CreateProxy implements InvocationHandler {
	private Object target;
	public Object create(Object target) {
		//生成代理对象
		this.target = target;
		Object xx  = Proxy.newProxyInstance(this.getClass().getClassLoader(),
				this.getClass().getInterfaces(),this);
		return xx;
		
	}
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		method.invoke(target, args);
		System.out.println("Pay successfully!");
		return null;
	}

}
import org.junit.jupiter.api.Test;

class ProxyTest {

	@Test
	public void test() {
		CreateProxy cp = new CreateProxy();
		Subject person = new Person();
		Object proxy = cp.create(person);
		Subject xxx = (Subject)proxy;
		xxx.shopping();
	}

}

报错:java.lang.ClassCastException: com.sun.proxy.$Proxy8 cannot be cast to dynamicProxy.Subject

           生成的动态代理对象不能转成dynamicProxy包下的Subject接口

            操作环境是JDK10,eclipse IDE

百度了好久,一开始觉得是Object对象是父类转成Interface接口子类 有问题但不是

其实是Proxy.newProxyInstance生成动态代理对象有问题

对应的newProxyInstance方法newProxyInstance(ClassLoader loader,Class<?>[] interfaces, InvocationHandler h

参数:loader - 类加载器来定义代理类     interfaces - 代理类实现的接口列表     h - 调度方法调用的调用处理函数

上面代码中interfaces参数传入的有问题

解决办法:

interfaces参数改为new Class[]{dynamicProxy.Subject.class}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值