Object[] elements = new Object[3];//定义存放代理对象的数组
ShapeProxyHandler proxyHandler1 = new ShapeProxyHandler(new Circle());
Object proxy1 = Proxy.newProxyInstance(null, new Class[] { Shape.class } , proxyHandler1);
elements[0] = proxy1;
这段代码,其中Circle是我自己定义的本包的类,Shape是Cirlce的父类(抽象类)
执行的时候,出现如下错误
Exception in thread "main" java.lang.IllegalArgumentException: class reflect.Circle is not visible from class loader
at java.lang.reflect.Proxy.getProxyClass(Unknown Source)
at java.lang.reflect.Proxy.newProxyInstance(Unknown Source)
at reflect.ProxyTestShape.main(ProxyTestShape.java:13)
感觉是默认的类加载器,找不到这个reflect.Circle,查看Proxy的getProxy方法,看到这句代码
String interfaceName = interfaces[i].getName();
Class interfaceClass = null;
try {
interfaceClass = Class.forName(interfaceName, false, loader);
} catch (ClassNotFoundException e) {
}
if (interfaceClass != interfaces[i]) {
throw new IllegalArgumentException(
interfaces[i] + " is not visible from class loader");
}
/*
* Verify that the Class object actually represents an
* interface.
*/
if (!interfaceClass.isInterface()) {
throw new IllegalArgumentException(
interfaceClass.getName() + " is not an interface");
}
应该是里面的这句
interfaceClass = Class.forName(interfaceName, false, loader);
和这句
if (interfaceClass != interfaces[i]) {
throw new IllegalArgumentException(
interfaces[i] + " is not visible from class loader");
}
从代码来看,应该加载进来的interfaceClass 和我传递进去的Shape.class不一样,这个要怎么解决呢?是类加载器的问题吗?