3 Stimmen

Wann soll eine verschachtelte Klasse verwendet werden?

Der folgende Code findet den Schnittpunkt von 2 Linien und gibt das Punktobjekt zurück. Sollte der Punkt nur von der Klasse IntersectionOf2Lines erstellt werden, sollte ich den Punkt zu einer verschachtelten Klasse machen? Wenn nicht, warum nicht? Vielen Dank

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);
    }

1voto

Paradiesstaub Punkte 2490

Wenn die Point-Klasse von keiner anderen Klasse benötigt wird und die Point-Klasse keinen Zugriff auf die privaten Klassenmember von IntersectionOf2Lines benötigt, könnten Sie die Point-Klasse zu einer statischen verschachtelten Klasse machen.

Eine statische verschachtelte Klasse ist eine leichtere innere Klasse, die keinen Zugriff auf die Mitglieder der Oberklasse hat und oft wie Strukturen in C verwendet wird.

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;
    }

}

0voto

Beryllium Punkte 12556

Wenn Point nur von IntersectionOf2Lines erstellt wird, würde ich es als statische innere Klasse implementieren: Auf diese Weise können Sie den Konstruktor als private deklarieren:

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);
    }

Wenn der Konstruktor private ist, erzwingt der Compiler Ihr Design/Ihre Absicht.

Dies ist besonders nützlich, wenn die Sichtbarkeit der Klasse, die das Ergebnis enthält, public ist (in Ihrem Beispiel ist sie paketprivat), und Sie nicht möchten, dass andere Personen "Ihre" Klasse instanziieren, da dies eine zusätzliche Abhängigkeit schafft.

0voto

Nandkumar Tekale Punkte 15494

Mathematisch gesehen besteht eine Linie aus einer Anzahl von Punkten. Wenn Sie die Point-Klasse außerhalb erstellen, können Sie diese verwenden, um den Punkt auf einer bestimmten Linie oder die Endpunkte der Linie anzuzeigen. Daher sollte es sich um eine normale Klasse handeln und nicht um eine verschachtelte Klasse von IntersectionOf2Lines.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X