首先,你遇到不明白的可以查API : getProxyClass(ClassLoader loader, Class<?>... interfaces)对可以传递给 Proxy.getProxyClass 的参数有以下几个限制:
- interfaces 数组中的所有 Class 对象必须表示接口,而不能表示类或基本类型。
- interfaces 数组中的两个元素不能引用同一 Class 对象。
- 所有接口类型的名称通过特定的类加载器必须可见。换句话说,对于类加载器 cl 和所有接口 i,以下表达式必须为 true: Class.forName(i.getName(), false, cl) == i
- 所有非公共接口必须位于同一包中;否则,该代理类将不可能实现所有的接口,无论它在哪一个包中定义。
- 对于有相同签名的指定接口中任何成员方法集:
- 如果任何方法的返回类型是基本类型或 void,那么所有的方法必须具有与此相同的返回类型。
- 否则,该方法之一必须是返回类型,它可以指派给该方法其余的所有返回类型。
- 得到的代理类必须不超过虚拟机在类上施加的任何限制。例如,虚拟机可以限制某一类实现至多 65535 的接口数;在这种情况下,interfaces 数组的大小必须不超过 65535。
如果违反了这些限制,Proxy.getProxyClass 将抛出 IllegalArgumentException。如果 interfaces 数组参数或其任何元素为 null,则将抛出 NullPointerException。
关于换成List,不可以?你确认你没把List的包倒错?我这边调试运行是可以的。
|
-
1.png
(39.47 KB, 下载次数: 45)
|