我有一些课,我想用它制作一个物体。但是,此类在其构造函数中设置了一个属性,使其无法使用。我无法编辑这个类的代码,因为它存在于一个非常紧密的代码库中。构造对象后无法更改此属性,因此即使存在setter方法,它也不起作用(它是SWT gui框架的一部分,并且无法动态更改)
我的直觉告诉我将其子类化并改变我需要改变的东西。应该只采取几行,因为这个类的其他方面将保持不变。但是,由于您需要在子类的构造函数中调用的第一行是超级方法,这意味着在我甚至可以执行任何操作之前调用父类的构造函数。
是否有任何方法可以通过更改一个小属性来创建此类中的对象,而无需创建一个复制/粘贴其所有代码的全新类,除了一个小的更改喜欢8?
谢谢!
编辑:因为有人要求代码:
public class Parent {
private Object important_object = null;
public Parent() {
important_object = new Object();
important_object.important_property = BAD;
}
}
public class Child extends Parent {
public Child() {
// how the heck do I make an instance of this
// class that has important_property set to GOOD
// instead of BAD?
}
}
答案 0 :(得分:2)
如果属性为private
,则不会提供important_object
或important_property
的设置者,也无法使用Reflection,因此无法更改属性。< / p>
答案 1 :(得分:1)
有一种叫做classworking的东西,它允许你在运行时修改Java字节码,但它绝对不是一件容易的事情,而且可能对它来说太过分了。虽然这是一篇非常有趣的读物。