下面是我的方法。在比较字符串时效果很好。我想使其能够比较Dates或任何具有可接受定义的compareTo方法的类。寻找一种简单的方法来做到这一点。我正在走一条破烂的路。也欢迎任何其他建议来改进此方法。

protected <E> int compareFields(E o1, E o2,String fieldName){
    String o1Data;
    String o2Data;
    try {
        o1Data = (String) o1.getClass().getMethod(fieldName).invoke(o1);
        o2Data = (String) o2.getClass().getMethod(fieldName).invoke(o2);
    }
    catch(Exception e) {
        throw new RuntimeException(e);
    }
    if(o1Data == null && o2Data == null){
        return 0;
    } else if (o1Data == null){
        return 1;
    } else if (o2Data == null){
        return -1;
    }
    return o2Data.compareTo(o1Data);
}

最佳答案

您是说以下意思吗?

protected <E> int compareFields(E o1, E o2, String fieldName){
    try {
        Comparable o1Data = (Comparable) o1.getClass().getMethod(fieldName).invoke(o1);
        Comparable o2Data = (Comparable) o2.getClass().getMethod(fieldName).invoke(o2);
        return o1Data == null ? o2Data == null ? 0 : 1 :
               o2Data == null ? -1 : o1Data.compareTo(o2Data);
    } catch(Exception e) {
        throw new RuntimeException(e);
    }
}


我假设您不想对数据进行反向排序。

10-08 03:57