没有构造函数的 Javassist 代理类

标签 java bytecode javassist

我目前使用 Javaassist 为类生成代理:

ProxyFactory f = new ProxyFactory();
f.setSuperclass(JFrame.class); // Just an example.

// I would like to create a proxy for JFrame to
// fill with method implementations...
f.setHandler(handler); // ... in an own handler

Class<?> proxyClazz = f.createClass();

我的问题是:JFrame 构造函数也被调用。说得通。但我不想要这个。我想生成一个空类作为代理,它与其他普通 JFrame 兼容分配。

有办法做到这一点吗?感谢您提供的所有想法和想法。

最佳答案

  1. 序列化

您可以以序列化形式创建表示所需类的字节数组,并使用ObjectInputStream.readObject

这是可能的,但很难准备正确的数据。

  • NativeConstructorAccessorImpl
  • 这就是 spy 方法在 mockito 中的实现方式。

  • Unsafe.allocateInstance
  • 因此,您准备代理类并实例化其中一种方法(或其他方式)。

    PS:看看objenesis图书馆。

    关于没有构造函数的 Javassist 代理类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47153148/

    相关文章:

    java - 调用实现接口(interface)的泛型方法时出现错误 : java. lang.AbstractMethodError

    java - "VerifyError: Expecting a stackmap frame"使用 Play 框架和 Google App Engine

    java - 如何在 selenium 中运行代码以在 python 脚本而不是 cron 中的一天中的特定时间执行函数

    java - 检测返回 null 的方法的静态字节码分析工具?

    executable - 字节码(如 Java 字节码)和文件和机器代码可执行文件(如 ELF)有什么区别?

    assembly - CIL nop 操作码的用途是什么?

    playframework - 在 helpers.CheatSheetHelper$2 无效常量类型 : 15 上 Play 1.2.x UnexpectedException ContinuationEnhancer

    java - InsertionSort 与间隙大小 = 1 的 ShellSort?

    java - 线性布局对于空 View 的行为如何?

    Java:这是否正确暂停线程?