Android совместимость версий для метода Math.toIntExact Utility - PullRequest
1 голос
/ 01 февраля 2020

Метод Math.toIntExact вызывает исключение на моем эмуляторе Android 6.0. (Более поздние версии эмулятора в порядке)

Эта операция Microsoft c является единственной операцией c, которую я нашел об этом. Правильно ли я считаю, что Math.toIntExact несовместим до Android 9.0?

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.dmurphy.remotescrumpoker, PID: 9527
    java.lang.NoSuchMethodError: No static method toIntExact(J)I in class Ljava/lang/Math; or its super classes (declaration of 'java.lang.Math' appears in /system/framework/core-libart.jar)
        at com.dmurphy.remotescrumpoker.Activity_TeamDetails$6.onComplete(Activity_TeamDetails.java:268)
        at com.google.android.gms.tasks.zzj.run(Unknown Source)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
D/FA: Event not sent since app measurement is disabled

1 Ответ

2 голосов
/ 01 февраля 2020

Math::toIntExact, согласно документации, было введено с API уровня 24, то есть Android 7.0. Так что да, он недоступен на Android 6.

Хорошая новость заключается в том, что вы можете легко реализовать его самостоятельно, извлекая его из java.lang.Math исходного кода .

public static int toIntExact(long value) {
    if ((int)value != value) {
        throw new ArithmeticException("integer overflow");
    }
    return (int)value;
}
...