【问题标题】:How to convert one generic list to another in java如何在java中将一个通用列表转换为另一个
【发布时间】:2012-08-22 02:21:22
【问题描述】:

我正在尝试将一个通用枚举列表转换为另一种通用列表类型,但总是出现以下编译错误:

不适用于参数

private static <T extends Enum<T>> List<T> enumListFromEnumList(List<Object> sourceEnumsList, Class<T> classObject) {
        List<T> enums = new ArrayList<T>();

        if(sourceEnumsList != null) {
            for(Object enumObject : sourceEnumsList) {
                if (enumObject instanceof Enum)
                    enums.add(Enum.valueOf(classObject, enumObject.toString().toUpperCase()));
            }
        }

        return enums;
    }

即使我试过这个:

private static <T extends Enum<T>> List<T> enumListFromEnumList(List<T> sourceEnumsList, Class<T> classObject) {
        List<T> enums = new ArrayList<T>();

        if(sourceEnumsList != null) {
            for(T enumObject : sourceEnumsList) {
                enums.add(Enum.valueOf(classObject, enumObject.toString().toUpperCase()));
            }
        }

        return enums;
    }

这就是我使用函数的方式:

adapterInfo.setResponseTypeList( enumListFromEnumList(info.getResponseTypeList(), CAPInfo.ResponseType.class));

更新:

当我转换成这个时它可以工作:

private static <S extends Enum<S>, T> List<S> enumListFromEnumList(List<T> sourceEnumsList, Class<S> classObject) {
        List<S> enums = new ArrayList<S>();

        if(sourceEnumsList != null) {
            for(T enumObject : sourceEnumsList) {
                enums.add(Enum.valueOf(classObject, enumObject.toString().toUpperCase()));
            }
        }

        return enums;
    }

所以现在的问题是如何翻译“&lt;S extends Enum&lt;S&gt;, T&gt; List&lt;S&gt;”部分(我的意思是它是如何工作的)

【问题讨论】:

  • 看起来你正在尝试用复杂的方法做一些简单的事情。你能描述一下你已经拥有什么以及你想要实现什么,以便人们可以提出最简单的方法吗?
  • 另外,在使用枚举时,您通常希望使用 EnumSet,而不是 List(除非您需要重复值或自定义顺序)
  • 感谢改进...

标签: java generics enums type-conversion


【解决方案1】:

这就是你要找的东西(我认为):

enum EnumA {
    FIRST,
    SECOND,
    THIRD
}

enum EnumB {
    FIRST,
    SECOND,
    THIRD
}

private static <A extends Enum<A>, B extends Enum<B>> List<B> enumListFromEnumList(List<A> sourceEnumsList, Class<B> classObject) {
    List<B> enums = new ArrayList<B>();

    if (sourceEnumsList != null) {
        for (A enumObject : sourceEnumsList) {
            enums.add(Enum.valueOf(classObject, enumObject.toString().toUpperCase()));
        }
    }

    return enums;
}

public static void main(String[] args) {
    List<EnumA> listA = new ArrayList<EnumA>();
    listA.add(EnumA.FIRST);
    listA.add(EnumA.THIRD);
    List<EnumB> listB = enumListFromEnumList(listA, EnumB.class);
    System.out.println(listB);
}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
相关资源
最近更新 更多