使用静态方法考虑使用以下类:
public class Vector2D {
/* ... */
public static Vector2D sum(Vector2D first, Vector2D second) {
return new Vector2D(first.x + second.x, first.y + second.y);
}
}
此方法也可以作为AspectJ中的类型间声明添加:
public aspect Vector2DMath {
public static Vector2D Vector2D.sum(Vector2D first, Vector2D second) {
return new Vector2D(first.x + second.x, first.y + second.y);
}
}
哪种方法在面向方面编程方面更正确?
就个人而言,我认为第一种方法更好(代码更少),但如果是这样,那么当静态方法的类型间声明可能有用时?
答案 0 :(得分:1)
IMO静态方法ITD实际上只对代码生成有用(spring roo就是一个例子)类似于C#部分类,它将代码生成器代码保存在与开发人员代码不同的文件中。
是的,第一种方法是比第二种方法更好的方法。
答案 1 :(得分:1)
比较苹果和梨是没有意义的。这里没有“更好”或“更糟”,只有情境决定:
说完这个并看一下你的例子,似乎Vector2D.sum
几乎解决了一个核心问题,所以如果你不一定需要AOP来解决“无源代码”问题,那么使用OOP和只需编辑课程。在其他情况下,决定可能会有所不同。 ITD for(非)静态方法是一种有用的AOP工具。
编辑:我忘了提到静态方法通常“糟糕”,因为很难对它们进行模拟测试。并非总是如此,但往往它们有点老式的C风格。在这个具体的例子中,为什么要创建一个静态方法来添加同一个类的两个实例?为什么常规sum
方法不能采用一个参数?