gpt4 book ai didi

java - 如何重写实例/具体类的方法运行时? (例如反射、cglib)

转载 作者:行者123 更新时间:2023-12-01 15:41:43 24 4
gpt4 key购买 nike

我想做的是一种可以的方法

  • 生成 X 类的实例(在 arg 中传递的类变量)并且
  • 重写它的一些方法

更具体地说,我想要重写的父类 X 包含

  • 不包含默认构造函数(例如所有带参数的构造函数)
  • 构造函数在同一个类中调用非私有(private)方法

本来我以为使用反射或者类似的东西很简单,然后我发现实现我的要求有限制。

我认为这是可以实现的,因为 Mockito 可以在运行时进行各种方法注入(inject)。
请大家给点建议,谢谢。
I图像的伪代码是这样的:

createAndOverride(Class X) {
X newObj = X.newInstance(args) {
@override
methodOfX(args2) {
...
}
}
return newObj;
}
  • 原始问题场景

我打算测试一个类,它有几个方法调用 X1.get()、X2.get()、X3.get()
在某些测试用例中,我需要使 Xn.get() 返回我可以控制测试的内容(例如 null)
由于以下限制:

  • 但是由于模拟工具对 JMock 1.0 的限制(我无法控制:( ),所以我不能简单地模拟 Xn.get() 返回“someSpecifiedObjects”
  • Xn 没有 null 构造函数和调用非私有(private)成员的构造函数

我的解决方法是自制 Xn 类并将它们传递给测试用例以使 Cn.get() 符合预期
代码示例:

ClassToTest.SomeMethod(new X1() {
@override
get() {
return someSpecifiedObjects;
}
});

这种事情是分散在测试用例中的。
因此,为了减少重复代码,我想构建一个方法来生成 Xn 实例,并指定重写方法进行测试。例如

X1 x1 = createAndOverride(X1);

那么,这篇文章的问题来了

最佳答案

您是否正在寻找类似 javassist 的内容?您可以在运行时检测代码并注入(inject)方法。我个人尝试尽可能避免字节码操作。您能否不在代码库中保留这些覆盖而不是即时执行?可能是类似 wrapper 的东西?

关于java - 如何重写实例/具体类的方法运行时? (例如反射、cglib),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7936589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com