猿问

如何使反向排序与泛型类类型一起使用

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


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

如果有人可以帮助我了解如何获得反向排序以适用于通用案例并帮助我了解为什么会出现上述错误,我将不胜感激。


湖上湖
浏览 92回答 2
2回答

暮色呼如

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

繁星点点滴滴

我找到了一种使用通配符使用泛型的方法,如下所示myClassList.sort(Comparator.comparing((MyClass<?>&nbsp;r)&nbsp;->&nbsp;r.getUpdatedTime()).reversed());这对我来说已经足够好了。希望它可以帮助对同一问题感兴趣的人。
随时随地看视频慕课网APP

相关分类

Java
我要回答