记一次忽略@SuppressLint(“NewApi“)提示引发的血案

34 篇文章 2 订阅

记一次忽略@SuppressLint(“NewApi”)提示引发的血案

本次开发中用到了Java中的优先级队列,需要根据给定的优先级对元素进行排序,于是我写出了下面这段代码:

private Comparator<CustomObject> comparator = new Comparator<CustomObject>() {
    @Override
    public int compare(CustomObject o1, CustomObject o2) {
        /**
         * 负数、0、正数
         * 小于、等于、大于
         */
        return o1.priority() - o2.priority();
    }
};


/**
 * 优先级队列
 */
private PriorityQueue<CustomObject> queue = new PriorityQueue<>(comparator);

与以往不同的是,在new PriorityQueue<>(comparator)构造器代码的下方有红色error提示,IDE给了版本兼容的提示,如下图:

在这里插入图片描述

当然了,作为一个成熟的开发,我毫不犹豫、义无反顾的按下了option + 回车键,使用了一种隐藏问题的方式,SuppressLint注解,代码如下所示:

    @SuppressLint("NewApi")
    private PriorityQueue<CustomObject> queue = new PriorityQueue<>(comparator);

烦人的提示终于没了,清爽多了。

出来混迟早要还的,没过多久我就收到了crash报告,具体如下所示:

java.lang.NoSuchMethodError: No direct method (Ljava/util/Comparator;)V in class Ljava/util/PriorityQueue; or its super classes (declaration of 'java.util.PriorityQueue' appears in /system/framework/core-libart.jar)

说到底,我用了一个低版本不存在的api方法,IDE给了我提示让我改,然后我因为觉得这个提示烦人,就用注解把提示隐藏掉了,问题依旧没有解决。

好吧,认真解决问题吧。经过考量,将PriorityQueue + Comparator替换为List + Comparator + Collections.sort(list, comparator)的方式,问题解决了。

这个故事告诉我们,IDE没事不会瞎给你提示的,以后长点心吧。

参考:
https://stackoverflow.com/questions/36103606/nosuchmethoderror-for-comparator/36103681

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tinyvampirepudge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值