关于java代理类编写碰到的一些有关问题
关于java代理类编写碰到的一些问题
这段代码,其中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方法,看到这句代码
应该是里面的这句
interfaceClass = Class.forName(interfaceName, false, loader);
和这句
if (interfaceClass != interfaces[i]) {
throw new IllegalArgumentException(
interfaces[i] + " is not visible from class loader");
}
从代码来看,应该加载进来的interfaceClass 和我传递进去的Shape.class不一样,这个要怎么解决呢?是类加载器的问题吗?
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不一样,这个要怎么解决呢?是类加载器的问题吗?