2

我正在开发一个 Java 库,它使用 cglib 创建库用户提供的抽象类的子类,并提供用户留下的抽象方法的自动生成实现。

我的问题是,如果所讨论的方法具有包本地(即默认)可访问性,那么我生成的方法显然被忽略了,并且用户在调用它时会得到一个 AbstractMethodError 。

我生成的类与原始类在同一个包中(我生成一个名称为 original.package.OriginalClassName_AutomaticImplementation 的类),尽管它们当然是由不同的类加载器加载的(即加载由 cglib 生成的字节数组而不是比磁盘文件);我怀疑这是问题所在。如果是这样,有什么办法可以解决吗?

4

1 回答 1

2

当使用包本地时,类加载器包名定义了该方法是否可访问。这是为了阻止类未经授权访问 API 方法。您可以在 java.lang 包中创建一个类并访问 java.lang 中的包本地方法。

您可以尝试调整加载要扩展的类的类加载器,然后将该类加载器作为 cglib 加载器的父级加载 cglib 版本。不知道会不会起作用。

于 2010-10-29T09:47:28.927 回答