我有一个方法看起来像这样。
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<>());