在Android上使用Java三元运算符的奇怪行为

时间:2016-02-25 16:47:33

标签: java android

我不知道为什么,但是当我在这个例子中使用三元运算符时,我得到了这个奇怪的错误:

Screenshot of the strange behavior of setInterpolator

我认为这与Java从运算符转换结果的方式有关,但它仅在某些特定情况下发生。

感谢您的任何解释。

注意:我搜索了一个,但只能找到与NPE相关的答案。

- 编辑 -

该应用使用:

  • compileSdkVersion 23
  • buildToolsVersion' 23.0.2'
  • minSdkVersion 14
  • targetSdkVersion 23
  • Android支持库23.2.0

在Android Studio 2.0 Beta 5上使用相应的gradle版本进行测试

2 个答案:

答案 0 :(得分:11)

原因在于三元运算符的工作方式。

它总是将两个对象都投射到它的两个对象的最近超级类型。 在您的情况下,它是BaseInterpolator,因为您的targetSDK版本设置为23

但是,由于你的minSDK是14,所以演员阵容不适用于所有设备。因此错误。

要修复此问题,您可以向这两个对象添加TimeInterpolator的显式强制转换。

答案 1 :(得分:0)

我通过以下代码修复此问题:

public class MyDecelerateInterpolator implements Interpolator {

    private DecelerateInterpolator interpolator = null;

    public MyDecelerateInterpolator() {
        interpolator = new DecelerateInterpolator();
    }

    public MyDecelerateInterpolator(float factor) {
        interpolator = new DecelerateInterpolator(factor);
    }

    @Override
    public float getInterpolation(float input) {
        return interpolator.getInterpolation(input);
    }
}