为什么 Android Studio Lint 在为 Java 8 支持添加了脱糖功能后,仍然会在 Date 函数上报告“在旧版本上调用新方法”?

Why does Android Studio Lint report "Calling new methods on older versions" on Date functions even after adding desugaring for Java 8 support?

提问人:tfrysinger 提问时间:9/9/2020 更新时间:9/9/2020 访问量:262

问:

我安装了最新的 AS 4.01,并使用 coreLibraryDesugaring (1.0.10) 为 Java 8 支持设置了最新的依赖项,并在我的 build.gradle 文件中设置了适当的 compileOptions。以下代码在使用 API 23 的设备上编译并运行,不会出错:

TemporalAccessor ta = null;
Instant i;
Date date = null;
try {
    int loc = 0;
    if ((loc = publishedDate.indexOf("+")) > 0) {
        // Offset time given
        publishedDate = adjustTimeFormat(publishedDate, loc);
        ta = DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(publishedDate);
        i = Instant.from(ta);
    } else if ((loc = publishedDate.indexOf("-")) > 0) {
        publishedDate = adjustTimeFormat(publishedDate, loc);
        ta = DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(publishedDate);
        i = Instant.from(ta);
    } else if (publishedDate.contains("Z")) {
        i = Instant.parse(publishedDate);
    } else {
        //
        ta = DateTimeFormatter.ISO_DATE.parse(publishedDate);
        i = Instant.from(ta);
    }
    date = Date.from(i);
} catch (Exception e) {
    ta = null;
}
if (ta == null) {
    date = new Date();
}
return date;

但是,lint 将其中许多行标记为“需要 API 级别 26(当前最小值为 21)”

我以为脱糖到位后,它应该允许这样做吗?这是棉绒虫吗?

android-studio lint jdk-脱糖

评论

0赞 Anonymous 9/9/2020
顺便说一句,我不相信最后一部分会成功。您可以使用的解析永远不足以定义 .elseISO_DATEInstant
0赞 tfrysinger 9/10/2020
这很有趣 - 你的意思是即使只是 Instant 的日期方面也不会被填充?
0赞 Anonymous 9/10/2020
对不起,@tfrysinger,你已经理解正确了:你的代码会抛出一个(也没有任何日期方面;在内部,它有一个部分表示自纪元以来的秒数,一个部分表示纳秒秒)。DateTimeExceptionInstant
0赞 tfrysinger 9/10/2020
我仍然感到困惑 - 也许我说错了 - 我实际上并不是说“即时的日期部分”,但显然 Date 类知道如何使用 Instant 来创建 Date,因为行 date = Date.from(i) 在所有其他情况下都工作正常。我刚刚检查了ISO_DATE上的文档以及我将其用作“包罗万象”的方式,我没有看到这个问题:它说它可以在有或没有偏移的情况下工作,我只是把它放在那里,以防我正在处理的字符串不属于其他类别。我错过了什么?
0赞 Anonymous 9/11/2020
我不是在评论中写更长的解释,而且由于这不是你问的,所以我也没有在回答中写它。你可以 (1) 尝试一下 (2) 相信我 (3) 问一个单独的问题并从这里链接到它,我会看看。

答: 暂无答案