1
我有一个方法看起来像这样。我该怎么做<T super V>?
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;
}
是否有任何其他的方式比这更好的?
这是真的编译,还是你的方法返回'T'而不是'集合 super V>''?你不应该把'Collection <>'分配给'List <>',而不要抛弃泛型。 –
@MarkPeters对不起,修正。 –