java - 类似泛型的局部变量

标签 java sorting generics wildcard comparable

我正在尝试对可比较对象的通用列表实现排序。问题是我无法为此类列表定义局部变量,这会导致代码重复。

基本上我需要一个变量来维护带有签名的方法的返回值
<T extends Comparable<T>> List<Item<T>> getItems(int itemType, Class<T> cl)

这里是代码https://ideone.com/mw3K26 。目标是避免第 25、26 和 29、30 行出现代码重复。

这可能吗?

最佳答案

将关联 itemType -> Class 放入 Map 并使用它来代替 if-else。

private static final Map<Integer, Class<? extends Comparable>> types = new HashMap<>();
static {
    types.put(1, Long.class);
    types.put(2, Date.class);
}

public List<Long> getSortedIds(int itemType) {
    Class<? extends Comparable> clz = types.get(itemType);
    if (clz != null) {
        List<Item> items = (List<Item>)getItems(itemType, clz);
        Collections.sort(items);
        return items.stream().map(it -> it.id).collect(Collectors.toList());
    }
    //...
    return null;
}

关于java - 类似泛型的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49386422/

相关文章:

java - 如何在没有 JOptionPane 的情况下在 Java 中创建自定义错误弹出消息?

java - 使用自定义堆栈跟踪的 Mockito.doThrow

java - 安卓工作室 : error: incompatible types: MainActivity cannot be converted to Application

java - 如何对对象的 ArrayList 进行排序(玩家姓名和玩家分数)

ios - 符合协议(protocol)和类的 Swift 属性

用于解析 Action 文件的java框架

C++ 将单个元素移动到 vector 中的新位置的最简单最有效的方法

c++ - 排序给出最后位置元素的错误输出

generics - 如何将LanguagePrimitives.GenericZero/get_Zero添加到System.String?

go - 我可以在 Golang 中基于另一个类型参数来约束一个类型参数吗?