试图清理一些讨厌的代码,我们没有源代码。想象一下这样的事情:
public class Driver{
private String paramA;
private String paramB;
new Driver(HugeAndOverbloatedObject object)
{
paramA = object.getSubObject4711().getParamX();
paramB = object.getSubObject4712().getParamY();
}
}
这第三个库到处都有这个:通过构造函数紧密耦合,尽管类几乎不相关。私有成员和强制构造函数继承的粗鲁组合使得代码的扩展几乎不可能在不创建“草率”的构造函数参数对象的情况下进行。
所以我试图通过 AspectJ 操作类并编译时编织,所以我可以将构造函数精简到如下所示:
Driver driver = new Driver("paramA", "paramB");
我认为这应该是可能的,并且我已经取得了一些进展。如果我有这样的事情:
public aspect NewConstructor {
Driver.new(String parameterA, String parameterB){
//New Constructor Code
}
}
并通过编织器运行它,我实际上在驱动程序中找到了一个新的构造函数,但并不像我预期的那样。
问题:编织类中出现意外的第三个参数
我希望我可以用两个参数调用它: new Driver("paramA", "paramB")
相反,我需要使用三个参数来调用它: new Driver("paramA", "paramB", new NewConstructor())
为什么我需要实例化切面的新实例并将其作为参数传递?这可以防止吗?