Ich habe eine Reihe von Animations-Listener in meinem Code, wo nur eine Methode in der Schnittstelle die meiste Zeit verwendet.Verwenden von Lambda-Ausdrücken mit nicht-funktionalen Schnittstellen in Java
Also habe ich diese Wrapper:
public class AnimationWrapper {
private Animation mAnimation;
public AnimationWrapper(Animation animation) {
mAnimation = animation;
}
public Animation getAnimation() {
return mAnimation;
}
public interface OnAnimationEnd {
void onAnimationEnd(Animation animation);
}
public interface OnAnimationStart {
void onAnimationStart(Animation animation);
}
public void setAnimationEndListener(OnAnimationEnd listener) {
mAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
listener.onAnimationEnd(animation);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
public void setAnimationStartListener(OnAnimationStart listener) {
mAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
listener.onAnimationStart(animation);
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
}
Auf diese Weise Code wie folgt:
Animation animation = AnimationUtils.loadAnimation(context, R.anim.my_animation);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
doSomething();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
kurz wie folgt aussehen:
AnimationWrapper wrapper = new AnimationWrapper(AnimationUtils.loadAnimation(context, R.anim.my_animation));
wrapper.setAnimationEndListener(a -> doSomething());
Ich frage mich nur, ob es eine bessere Möglichkeit, nicht-funktionale Schnittstellen mit einer Methode in separate Schnittstellen aufzuteilen, so dass jede Methode verwendet werden kann s unabhängig mit Lambda-Ausdrücken.
Gibt es eine abstrakte AnimationAdapter-Klasse, die leere Methoden implementiert? –