Java 有条件地实现接口

Java 有条件地实现接口,java,android,Java,Android,因此,我正在尝试在我的应用程序中制作一些动画,并且有一种方法可以不使用API11中的ObjectAnimator和AnimatorListener。然而,它们不像仅仅使用这些类制作动画那样平滑和健壮 因此,我通过检查API级别对对象类中的代码进行了更改,这样除非API级别为11+,否则不会调用ObjectAnimator和AnimatorListener之类的东西 问题是,我的对象正在实现AnimatorListener,即使它的功能没有在所有版本的代码中使用。我认为这会导致我的应用程序启动时出

因此,我正在尝试在我的应用程序中制作一些动画,并且有一种方法可以不使用
API11
中的
ObjectAnimator
AnimatorListener
。然而,它们不像仅仅使用这些类制作动画那样平滑和健壮

因此,我通过检查API级别对对象类中的代码进行了更改,这样除非API级别为11+,否则不会调用
ObjectAnimator
AnimatorListener
之类的东西

问题是,我的对象正在实现
AnimatorListener
,即使它的功能没有在所有版本的代码中使用。我认为这会导致我的应用程序启动时出现
VerifyError
,因为现在它会在API级别为10或更低的设备上崩溃

有没有一种方法可以基于API级别有条件地实现接口,或者有其他方法可以实现相同的功能


谢谢

您可以尝试使用哪个Backport将动画UI移植到11之前的版本。

我认为您正在寻找工厂设计模式:


事实上,如果您是根据更高的SDK目标或使用更高的SDK目标构建的,那么这是可以的,问题只是当您的代码确实在缺少来自更高SDK的类的设备上运行时。正如其他人所建议的,你可以去工厂

public class Factory {
  public static <T> T getImplementation(){
    if(<SDK_LEVEL_INCOMPATIBLE>){
      return (T)new <package>.OldSchoolAnimator();
    }else{
      return (T)new <package>.SuperAnimator();
    }
  }
}


...
SomeImplementation impl = new Factory().getImplementation();
...
公共类工厂{
公共静态gett实现(){
if(){
返回(T)new.oldschool animator();
}否则{
return(T)new.SuperAnimator();
}
}
}
...
SomeImplementation impl=new Factory().getImplementation();
...

注意,“SomeImplementation”必须是Oldschool Animator和SuperAnimator类的通用超级类型或接口!不要对工厂中的实现类使用“imports”,而是使用完全限定的类名。

我最终使用了一个匿名内部类作为侦听器,并使用完全限定的类名,而不是导入其他动画对象

也许可以提供一个相关的例子,而不仅仅是一个链接。扣缴+1直到我看到更多的努力:D