不可变类的静态与非静态方法

9 java static api-design

鉴于下面的类定义.如何决定存根方法是静态还是非静态?

class Point {
    private final int x;
    private final int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    // Should the methods add(), subtract() and inverseOf() be non-static ...

    public Point add(Point point) {

    }

    public Point subtract(Point point) {

    }

    public Point inverseOf() {

    }


    // Or static?

    public static Point add(Point point1, Point point2) {

    }

    public static Point subtract(Point point1, Point point2) {

    }

    public static Point inverseOf(Point point) {

    }
}
Run Code Online (Sandbox Code Playgroud)

sva*_*hon 9

我会选择方法.然后,您可以使方法成为接口的一部分并覆盖它们.当你必须处理2d点或3d点并且有一些不太关心的客户端代码并且只需要在实现接口的Point上执行操作时,你将获得好处.

  • 只有拥有静态方法的理由是,如果要使用null Point实例有效的大量调用. (3认同)