4

列挙型の1つのジェネリックリストを別のジェネリックリストタイプに変換しようとしていますが、常に次のコンパイルエラーが発生します。

引数には適用されません

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;
    }

だから今問題は""の部分をどのように翻訳<S extends Enum<S>, T> List<S>するかです(私はそれがどのように機能するかを意味します)

4

1 に答える 1

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);
}
于 2012-08-27T15:35:54.853 に答える