You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JDK8的Java代码迁移至JDK16?解决Long构造方法弃用警告

适配JDK16重构文件按日期排序方法

原代码中使用的new Long(long)构造器在JDK9及以后被标记为废弃(JDK16中明确标记为待移除),这是因为Java提供了更高效的自动装箱机制和直接比较原始类型的方法,无需显式创建Long对象。以下是几种重构方案:

方案1:修复废弃API并优化匿名内部类

public static File[] getFileListFromDirByDate(String dir, final boolean byAscendingDate) {
    File directory = new File(dir);
    if (!directory.isDirectory()) {
        return null;
    }
    File[] files = directory.listFiles();
    // 新增空判断,避免listFiles返回null时触发空指针异常
    if (files == null) {
        return null;
    }
    // 使用泛型Comparator<File>,省去强制类型转换
    Arrays.sort(files, new Comparator<File>() {
        @Override
        public int compare(File o1, File o2) {
            long modifiedTime1 = o1.lastModified();
            long modifiedTime2 = o2.lastModified();
            // 用Long.compare直接比较原始long值,无需装箱
            return byAscendingDate ? Long.compare(modifiedTime1, modifiedTime2) : Long.compare(modifiedTime2, modifiedTime1);
        }
    });
    return files;
}

方案2:用Lambda表达式简化代码(JDK8+适用)

Lambda表达式可替代匿名内部类,让代码更简洁:

public static File[] getFileListFromDirByDate(String dir, boolean byAscendingDate) {
    File directory = new File(dir);
    if (!directory.isDirectory()) {
        return null;
    }
    File[] files = directory.listFiles();
    if (files == null) {
        return null;
    }
    Arrays.sort(files, (o1, o2) -> {
        long modifiedTime1 = o1.lastModified();
        long modifiedTime2 = o2.lastModified();
        return byAscendingDate ? Long.compare(modifiedTime1, modifiedTime2) : Long.compare(modifiedTime2, modifiedTime1);
    });
    return files;
}

方案3:用Comparator静态方法实现优雅排序(JDK8+适用)

利用JDK8新增的Comparator.comparingLong方法,进一步简化逻辑:

public static File[] getFileListFromDirByDate(String dir, boolean byAscendingDate) {
    File directory = new File(dir);
    if (!directory.isDirectory()) {
        return null;
    }
    File[] files = directory.listFiles();
    if (files == null) {
        return null;
    }
    // 按文件修改时间升序排序
    Comparator<File> dateComparator = Comparator.comparingLong(File::lastModified);
    // 如果需要降序,反转比较器
    if (!byAscendingDate) {
        dateComparator = dateComparator.reversed();
    }
    Arrays.sort(files, dateComparator);
    return files;
}

关键改进点说明

  • 替换new Long(long)为Long.compare(long, long):直接比较原始long类型,避免不必要的装箱操作,同时解决API废弃警告
  • 使用泛型Comparator<File>:消除强制类型转换,提升代码类型安全性
  • 新增files == null判断:避免listFiles()因权限问题或目录为空返回null时,调用Arrays.sort触发空指针异常
  • 简化代码结构:利用Lambda和Comparator静态方法,让代码更易读、易维护

内容的提问来源于stack exchange,提问作者Frank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:05:19