我正在创建一个对象在其中实现动画接口的游戏。我有一个动画的父界面。这是一个简化的版本:
public interface Animates<S extends Animator> {
S createAnimator(long animationTime);
}
此外,我有多个扩展此接口的接口。两个例子:
public interface AnimatesPaint extends Animates<PaintAnimator> {
PaintAnimator createPaintAnimator(long animationTime);
default PaintAnimator createAnimator(long animationTime) {
return createPaintAnimator(animationTime);
}
}
和
public interface AnimatesPosition extends Animates<PositionAnimator> {
PositionAnimator createPositionAnimator(long animationTime);
@Override
default PositionAnimator createAnimator(long animationTime) {
return createPositionAnimator(animationTime);
}
}
您可以看到,扩展Animates
的接口将覆盖createAnimator
方法,以便将createAnimator
的逻辑委托给实现该接口的类。
我这样做的原因是,我希望能够拥有一个可以实现多个动画界面的屏幕元素(可以进行动画处理)(例如,AnimatesPosition
可以移动元素,而AnimatesPaint
可以更改其颜色) )。
但是,这显然不起作用。当我在一个类中同时实现这两种方法时(如下图所示),我得到编译错误:
createAnimator(long)在AnimatesPaint中与AnimatesPosition中的createAnimator(long);尝试使用返回类型不兼容
这是同时实现两个Animates接口的类的示例:
public class ScreenElement implements AnimatesPaint, AnimatesPosition {
@Override
PositionAnimator createPositionAnimator(long animationTime) {
return new PositionAnimator(animationTime);
}
@Override
PaintAnimator createPaintAnimator(long animationTime) {
return new PaintAnimator(animationTime);
}
}
所以我不明白AnimatesPaint
和AnimatesPosition
都已经实现了createAnimator
。但是,错误消息似乎表明createAnimator
也需要由ScreenElement
实现!如果还没有实现createAnimator
,我会明白,为什么会发生冲突。
我的逻辑哪里出问题了?
最后,我要实现的是拥有一种可以启动任何类型的动画的通用方法。例如:
public class AnimationStarter<S extends Animates, T> {
public void startAnimation(S animates, T start, T target, long animationTime) {
Animator animator = animates.createAnimator(animationTime);
animator.init(start, target);
animates.setAnimator(animator);
animator.startAnimation();
}
}
-Edit-]
根据要求,这是Animator的声明
public abstract class Animator<T> {}
及其扩展类之一
public class PositionAnimator extends Animator<Point>{}
所以我不明白
AnimatesPaint
和AnimatesPosition
都已经实现了createAnimator
。