java - 当使用 Bounded 类型参数或直接类型接口(interface)时

标签 java generics bounded-wildcard

如果您需要将接口(interface)类型的参数传递给您可以使用两个 impl 的方法。

使用有界类型参数:

public static <I extends InterfaceObj> void isTrue(boolean expression, I interfaceobj) {
        if(!expression){
            throw new RunTimeException(interfaceobj);
        }}

否则你可以使用接口(interface)类型:

public static void isTrue(boolean expression, InterfaceObj interfaceobj) {
        if(!expression){
            throw new RunTimeException(interfaceobj);
        }
    }

然后,如果我有一个实现 InterfaceObj 的类,我可以在第一个和第二个示例中使用它,这样我就看不出它们之间的区别、优点和缺点。

  • 每种情况有什么区别?
  • 什么时候使用一种或另一种更好?

最佳答案

I don't see the difference, advantadges and disadvantages from one or other.

我想你忘记了 Collection !

如果您有一个 Collection 参数,这就是有界类型参数的真正优势发挥作用的地方

在这个方法中,你只能传递一个像List<InterfaceObj> list = new ArrayList<InterfaceObj>();这样实例化的列表。

public static void processList(List<InterfaceObj> input){
    //...
}

但是如果您使用有界参数化泛型,您可以将以下所有列表作为输入传递

List<InterfaceObj> list = new ArrayList<InterfaceObj>();
List<SubInterfaceObj> list = new ArrayList<SubInterfaceObj>();
List<SubSubInterfaceObj> list = new ArrayList<SubSubInterfaceObj>();

public static void processList(List<? extends InterfaceObj> input){
    //...
}

关于java - 当使用 Bounded 类型参数或直接类型接口(interface)时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38914132/

相关文章:

java - Primefaces:在我的视野中添加咆哮

java - 如何为列表编写迭代器?

java - 使用 Google Analytics API 检索页面浏览量的指南

Java:有界通配符或有界类型参数?

具有有界通配符的泛型类型的 Java 泛型集合

java - 什么是 PECS(生产者扩展消费者 super )?

java - JPA Criteria 查询分组依据并获取最后一条记录

java - 在 Java 泛型类中,在构造函数级别添加额外的泛型约束?

swift - 编译器无法推断返回类型

generics - 将 javac 与 String[] 一起使用时出现意外错误