假设我有一个方法,比如
protected static List<? extends ObjectWithNameAndId> combineSelectedWithFilteredList(
String[] selectedRecordIds,
List<? extends ObjectWithNameAndId> previousList,
List<? extends ObjectWithNameAndId> newFilteredList) {
有没有一种方法可以指定 previousList
的泛型类型? , newFilteredList
, 并且返回类型必须相同?例如:
protected static List<K extends ObjectWithNameAndId> combineSelectedWithFilteredList(
String[] selectedRecordIds,
List<K extends ObjectWithNameAndId> previousList,
List<K extends ObjectWithNameAndId> newFilteredList) {
因此你可以传入两个 List<Foo>
, 但没有一个 List<Foo>
和一个List<Bar>
即使Foo
和 Bar
都扩展/实现 ObjectWithNameAndId
.如果你传入两个 List<Foo>
,即使不知道实现,你也可以指望得到一个 List<Foo>
退出,而不仅仅是一个包含扩展/实现 ObjectWithNameAndId
的任何类型的列表.
最佳答案
是的,您需要先声明类型参数:
protected static <K extends ObjectWithNameAnd> List<K> combineSelectedWithFilteredList(
String[] selectedRecordIds,
List<K> previousList,
List<K> newFilteredList) {}
参见 https://docs.oracle.com/javase/tutorial/extra/generics/methods.html获取完整的详细信息和更多示例。
奖励:
如果你想为一个方法指定多个泛型类型,它看起来像这样:
public static <K extends ObjectWithName, C extends Collection<K>> C
truncateObjectNamesInCollection(C collection, int maxNameLength) {
上面的例子可以接受一个List<Type>
。它会返回 List<Type>
, 或 Set<ObjectWithNameAndId>
它会返回 Set<ObjectWithNameAndId>
关于java - 我可以使用 "<? extends Type>"指定方法参数中的多个泛型必须是同一类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29243164/