我正在使用JavaFX Shape
子类,我遇到了我认为是一个相当奇怪的问题。我的目标是扩展其中几个形状子类(即Rectangle
,Circle
),以便将我自己的属性添加到这些对象中。例如,Rectangle
子类的扩展名如下所示:
public class MyRectangle extends javafx.scene.shape.Rectangle
implements SpecialInterface {
private SpecialAttributes specialAttributes;
// ...
// Constructors, getters and setters here
// ...
}
SpecialInterface
可用于指定与将添加到MyRectangle
和MyCircle
的新属性相关的方法,在这种情况下:
public interface SpecialInterface {
public SpecialAttributes getSpecialAttributes();
public void setSpecialAttributes();
}
但是,当我尝试创建引用Rectangle
和Circle
的子类的服务类时,似乎我不能这样做。基本上,当我需要利用Shape
子类和SpecialInterface
接口的属性和方法时,就会出现问题:
public class ManipulationService{
public ManipulationService(<Undefined> myExtendedShape) {
// object from JavaFX Node, inherited by JavaFX Shapes (Circle, Rectangle, etc)
myExtendedShape.onRotate(new EventHandler<>(){
// ...
});
// a method from MyRectangle or MyCircle
myExtendedShape.getSpecialAttributes();
}
// ...
}
这里的问题是我不能为我的扩展形状创建一个超类来替换上面的<Undefined>
。具体来说,如果我创建一个超类,由于缺少多重继承,我无法扩展我想在子类中扩展的特定形状。但是,如果我将<Undefined>
替换为Shape
,则会失去SpecialInterface
中方法的访问权限。
我确定之前已经解决了这种多重继承问题,但我找不到解决方案。我很感激有关如何处理这种情况的任何建议。
答案 0 :(得分:3)
您可以像这样定义ManipulationService
:
class ManipulationService<T extends Shape & SpecialInterface> {
public ManipulationService(T myExtendedShape) {
// method from Shape
myExtendedShape.onRotate(/* ... */);
// method from SpecialInterface
myExtendedShape.getSpecialAttributes();
}
}