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

JTable重写getColumnClass返回long基本类型时排序失效,如何解决?

JTable中long基本类型排序异常的原因及修复方案

问题原因

JTable的排序逻辑依赖getColumnClass()返回的类型匹配对应比较器:

  • 当返回Long.class(包装类型)时,JTable会调用数值比较器,按数字大小正常排序;
  • 但返回long.class(基本类型)时,JTable无法识别为数值类型,会默认使用字符串比较器,最终按字符串字典序排序,导致结果不符合预期。

修复方案

修改getColumnClass()方法,将基本类型long替换为对应的包装类Long,其他类型保持原有逻辑即可:

public Class<?> getColumnClass(int columnIndex) {
    Class<?> fieldType = columnFields[columnIndex].getType();
    // 针对long基本类型,返回Long包装类
    if (fieldType == long.class) {
        return Long.class;
    }
    // 其他类型直接返回原字段类型
    return fieldType;
}

如果需要兼容所有基本数值类型(如int、double等),可以扩展判断逻辑,统一将基本类型转为对应包装类:

public Class<?> getColumnClass(int columnIndex) {
    Class<?> fieldType = columnFields[columnIndex].getType();
    if (fieldType.isPrimitive()) {
        // 基本类型映射为对应包装类
        return switch (fieldType.getName()) {
            case "int" -> Integer.class;
            case "long" -> Long.class;
            case "double" -> Double.class;
            case "float" -> Float.class;
            case "byte" -> Byte.class;
            case "short" -> Short.class;
            case "boolean" -> Boolean.class;
            case "char" -> Character.class;
            default -> fieldType;
        };
    }
    return fieldType;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:50:45