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?