I have a bunch of animation listeners in my code where most of the time I used only one method in the interface.
So, I created this shell:
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) {
}
});
}
}
So the code is as follows:
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) {
}
});
The end is as follows:
AnimationWrapper wrapper = new AnimationWrapper(AnimationUtils.loadAnimation(context, R.anim.my_animation));
wrapper.setAnimationEndListener(a -> doSomething());
I'm just wondering if there is a better way to split non-functional interfaces into separate interfaces with one method so that each method can be used separately with lambda expressions.
source
share