我的方法看起来像这样。
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;
}
还有其他方法比这更好吗?
答案 0 :(得分:1)
我正在回答我自己的问题,以便任何有类似问题的人都可以自助。
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<>());