我有一个方法看起来像这样。

public static <E extends Enum<E> & FieldEnum<E, V>, V>
    void fieldValues(class<E> enumType,
                     Collection<? super V> fieldValues) {
    for ( enumConstant : enumType.getEnumConstants()) {
        fieldValues.add(enumConstant.fieldValue());
    }
}


它可能会起作用。

List<Some> list = new ArrayList<>();
fieldValues(Some.class, list);


现在,我想更改方法以返回给定的集合参数(fieldValues)。我做到了

public static <E extends Enum<E> & FieldEnum<E, V>, V, T super V>
    Collection<T> fieldValues(Class<E> enumType,
                              Collection<T> fieldValues) {
    for (E enumConstant : enumType.getEnumConstants()) {
        fieldValues.add(enumConstant.fieldValue());
    }
    return fieldValues;
}


编译器抱怨。

com/github/.../lang/FieldEnums.java:[78,61] > expected
com/github/.../lang/FieldEnums.java:[78,62] illegal start of type
com/github/.../lang/FieldEnums.java:[78,69] '(' expected


我该如何解决?返回给定集合以便我可以做的正确方法是什么

List<Some> = fieldValues(Some.class, new ArrayList<Some>());




我发现我可以

public static <E extends Enum<E> & FieldEnum<E, V>, V>
    Collection<? super V> fieldValues(
    Class<E> enumType, Collection<? super V> fieldValues) {
    for (E enumConstant : enumType.getEnumConstants()) {
        fieldValues.add(enumConstant.fieldValue());
    }
    return fieldValues;
}


还有没有其他比这更好的方法了?

最佳答案

我在回答自己的问题,以便遇到类似问题的任何人都可以自助。

public static <E extends Enum<E> & FieldEnum<E, V>, V,
               T extends Collection<? super V>>
    T fieldValues(Class<E> enumType, T fieldValues) {
    for (E enumConstant : enumType.getEnumConstants()) {
        fieldValues.add(enumConstant.fieldValue());
    }
    return fieldValues;
}


现在我可以做到这一点。

List<Some> list = fieldValues(Some.class, new ArrayList<>());

10-07 20:59