java - 我可以使用 "<? extends Type>"指定方法参数中的多个泛型必须是同一类型吗?

标签 java generics parameters

假设我有一个方法,比如

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>即使FooBar都扩展/实现 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/

相关文章:

java - Spring 3.2 Autowire 泛型类型

generics - 代表任何值的类。类型应该隐藏,但类型应该是可比较的

java - 小服务程序 : Handling many optional parameters

javascript - Angular:如何从单选按钮组获取数据并将其作为参数传递给方法?

java - 未处理的内部错误。 org.apache.hadoop.mapred.jobcontrol.JobControl.addJob

java - Android : Mockito (2. 0.2-beta) - 无法模拟/监视 final类

java - 使用 super AND 实例变量的构造函数

java - JUnit 和 Clojure 单元测试

java - Android Java 静态泛型调用

ruby-on-rails - 将 Unpermitted 参数从打印到日志