如何获得反向排序以使用通用类类型

时间:2019-04-19 05:30:44

标签: java sorting generics

我有一个具有通用属性的类。

public class MyClass<T> {

    T data;

    MyClassType source;

    ZonedDateTime updatedTime;
}

我正在尝试以相反的顺序对包含不同类型的T的上述类的列表进行排序

myClassList.sort(Comparator.comparing(MyClass::getUpdatedTime).reversed()); //Doesn't work
  

错误:(372,61)java:不兼容的类型:无法推断类型变量T,U       (参数不匹配;方法参考无效         com.quicken.subscriptionservice.dtos.UnifiedHistoryResponse类中的getUpdatedTime方法不能应用于给定类型           必需:无参数           找到:java.lang.Object           原因:实际和正式参数列表的长度不同)

     

错误:(372,62)Java:无效的方法参考     非静态方法getUpdatedTime()不能从静态上下文中引用

如果我删除了“ .reversed”,它可以正常工作。

如果我将我的类修改为使用Object类而不是如下的Generic类型,它也会起作用。

public class MyClass {

    Object data;

    MyClassType source;

    ZonedDateTime updatedTime;
}

现在进行以下排序

myClassList.sort(Comparator.comparing(MyClass::getUpdatedTime).reversed()); //Now works

如果有人能帮助我理解如何针对通用案例进行逆向排序并帮助我理解为什么会出现上述错误,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果使用对象类,则将对象强制转换为对象类。它不是通用编程。您需要参数化方法参考。

答案 1 :(得分:0)

我发现如下使用通配符使用泛型的方法

myClassList.sort(Comparator.comparing((MyClass<?> r) -> r.getUpdatedTime()).reversed());

这对我来说已经足够了。希望它可以帮助对同一问题感兴趣的人。