微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PrimitiveIterator 不适用于 Android 中的 API 脱糖

如何解决PrimitiveIterator 不适用于 Android 中的 API 脱糖

我正在尝试在我的代码中使用 PrimitiveIterator.OfInt、PrimitiveIterator.OfLong 等。我的最小 SDK 版本是 16,因此为了获得对 Java 8 类和接口的支持,我遵循了此处给出的 API 脱糖步骤:

https://developer.android.com/studio/write/java8-support#library-desugaring

因此在我的模块 build.gradle 中,我进行了以下更改:

defaultConfig{
    multiDexEnabled true
}

compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
        coreLibraryDesugaringEnabled true
    }

dependecies{
        implementation "androidx.multidex:multidex:$multidex_version"
        coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
}

此后,我可以使用“java.util.Instant”、“java.util.Stream”等类,但仍然无法使用 PrimitiveIterator 接口。它仍然要求为 API 版本 24 添加注释。

这里也显示了对所需接口的支持,但似乎没有。 https://developer.android.com/studio/write/java8-support-table

解决方法

这很可能是 Lint 问题。

我在使用 API 16 映像的虚拟设备和在 Android 5.1 (API 22) 上运行的 Wiko Lenny 2 上运行了以下仪器测试。在这两种情况下,当 coreLibraryDesugaringEnabled 设置为 true 时测试成功,而当 ClassNotFoundException 设置为 coreLibraryDesugaringEnabled 时给出 false

所以我想说,标记 Lint 对 @SuppressLint("NewApi") 有问题的语句,然后你就完成了。

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.PrimitiveIterator;

import androidx.test.ext.junit.runners.AndroidJUnit4;

@RunWith(AndroidJUnit4.class)
public class PrimitiveIteratorTest {

    PrimitiveIterator.OfInt intIterator;

    @Before
    public void setUpIterator() {
        intIterator = new PrimitiveIterator.OfInt() {

            final int[] intArray = {1,2,3,4,5,6,7,8,9,10};
            int index = -1;

            @Override
            public int nextInt() {
                return intArray[++index];
            }

            @Override
            public boolean hasNext() {
                return index < intArray.length - 1;
            }
        };
    }

    @Test
    public void primitiveIteratorTest(){

        int first = intIterator.nextInt();
        int second = intIterator.nextInt();

        assert(first == 1);
        assert(second == 2);
        assert(intIterator.hasNext());
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。