3

以下のコードは、2 つの線の交点を見つけて、ポイント オブジェクトを返します。ポイントがIntersectionOf2Linesクラスによってのみ作成される場合、ポイントをネストされたクラスにする必要がありますか? そうでない場合は、なぜですか?ありがとう

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

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

    int getX() {
        return x;
    }

    int getY() {
        return y;
    }
}

public class IntersectionOf2Lines {

    public static Point calculateIntersection(Line line1, Line line2) {
        int x = (line2.getConstant() - line1.getConstant()) / (line1.getSlope() - line2.getSlope());
        int y = line1.getSlope() * x + line1.getConstant();

        return new Point(x, y);
    }
4

3 に答える 3

1

Point クラスが他のクラスで必要とされておらず、Point クラスが IntersectionOf2Lines のプライベート クラス メンバーにアクセスする必要がない場合は、Point クラスをstatic ネストされたクラスにすることができます。

静的なネストされたクラスは、スーパー クラス メンバーにアクセスできない軽い内部クラスであり、C の構造体のようによく使用されます。

package main;

public class Main {

    public static void main(String[] args) {

        MyPoint p = new MyPoint();
        p.x = 5;
        System.out.println("x: "+ p.x);

    }

    private static class MyPoint {
        int x;
    }

}
于 2013-06-15T23:05:52.800 に答える
0

数学的には、線は点の数でできています。外部で Point クラスを作成している場合は、特定の線上のポイント、線の終点を表示するために使用できるため、IntersectionOf2Lines にネストされたクラスではなく、通常のクラスである必要があります。

于 2013-06-16T18:05:56.750 に答える
0

Pointによってのみ作成される場合は、静的なネストされたクラスIntersectionOf2Linesとして実装します。このようにして、コンストラクターを次のように宣言できます。private

public class IntersectionOf2Lines {
    static class Point {
        private final int x;
        private final int y;

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

        int getX() {
            return x;
        }

        int getY() {
            return y;
        }
    }

    public static Point calculateIntersection(int line1, int line2) {
        int x = 1;
        int y = 2;

        return new Point(x, y);
    }

コンストラクターが の場合private、コンパイラーは設計/意図を強制します。

これは、結果を含むクラスの可視性がpublic(この例ではpackage private) であり、他の人が「あなたの」クラスをインスタンス化することを望まない場合に特に便利です。これにより、追加の依存関係が作成されるためです。

于 2013-06-16T17:57:39.333 に答える