Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Java - Parametr pro dvě třídy se stejným prapředkem?

Dobrý den,

Řekněme, že mám dvě vlastní třídy a HBox a VBox, které mají společného prapředka (Pane). Jak, prosím Vás, upravím metodu, aby akceptovala objekty obou tříd? Děkuji

public class HBox extends javafx.scene.layout.HBox {

    public HBox(double x, double y) {
        super();
        setLayoutX(x);
        setLayoutY(y);
    }
}

public class VBox extends javafx.scene.layout.VBox {

    public VBox(double x, double y) {
        super();
        setLayoutX(x);
        setLayoutY(y);
    }
}

public HBox createLayout(double x, double y) {
    var hbox = new HBox(x,y);
    //CODE
    return hbox;
}
Předmět Autor Datum
Definujes spolecne rozhrani tech trid. Instance tohoto rozhrani pak bude na vstupu tvoji metody. To… nový
MaSo 23.12.2021 15:49
MaSo
Definujes spolecne rozhrani tech trid. Instance tohoto rozhrani pak bude na vstupu tvoji metody. To… poslední
MichalDM 23.12.2021 16:27
MichalDM

Definujes spolecne rozhrani tech trid. Instance tohoto rozhrani pak bude na vstupu tvoji metody. To je Java 101…

PS.: Asi taky neni nutne, aby tvoje tridy dedily z nejakych knihovnich trid. Daleko lepsi reseni by byla kompozice...

Definujes spolecne rozhrani tech trid. Instance tohoto rozhrani pak bude na vstupu tvoji metody. To je Java 101…

Tohle jsem napsal ryze jako příklad. Jde o to, že třídy se liší pouze v typu layout. A jednodušší je to dát do samostatných tříd. A už jsem dělal něco obdobného s Path a funguje to

public class Shape1 extends javafx.scene.shape.Path {

    public Shape1(PathElement... elements) {
        super(elements);
    }    
}

public class Shape2 extends javafx.scene.shape.Path {

    public Shape2(PathElement... elements) {
        super(elements);
    }    
}

public static <S extends Path> ArrayList<S> create_array(
    int X1, int Y1, int X2, int Y2,
    Function<PathElement[], S> shapeConstructor) {

    var shapes = new ArrayList<S>();
    shapes.add(shapeConstructor.apply(new PathElement[] {
        new MoveTo(X1, Y1), new LineTo(X2, Y2)
    }));
    //...
    return shapes;
}

Tady však vracím ArrayList a obě třídy mají společného předka (ne až prapředka)

PS. A v čem je lepší kompozice?

Zpět do poradny Odpovědět na původní otázku Nahoru