在相同 class 的实例方法中使用静态方法

Use static method inside instance method of the same class

假设我有一个 class Point。 我想给用户一个方便计算2Points之间距离的工具,所以我写了方法:

static float distance (Point p1, Point p2)

现在,我还想给用户一个工具,让他可以直接计算他已经实例化的一个 Point 和另一个 Point:

之间的距离
float distance (Point p)

在实例方法 distance(Point) 中使用静态方法 distance(Point, Point) 是个好主意吗?类似于:

float distance (Point p){
    return Point.distance(this, p);
}

这样我就可以重用代码。

如果这是一件糟糕的事情,我为什么要避免这样做?

很多人都在争论静态方法在可测试性方面的一般优缺点,我同意其中的大部分内容。所以我不打算详细说明,只是回答你的问题:

  • 避免代码重复是个好主意,那就去做吧。
  • 我会反其道而行之,如果你坚持保留静态方法(我会取消它),从静态实用方法调用 p1.distance(p2) 并将计算逻辑放入非静态方法).我会说有充分的理由问 "hey, I have got this point p1, give me its distance to p2"。我看不出使用静态方法如何变得更容易。无论如何你需要提供两个 Point 实例,没有实例你什么都做不了,那么为什么首先要让它成为静态的呢?