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…
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…

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