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對不起,修正。 –