Java 泛型 - 有界类型参数

标签 java generics

让我用一个例子来描述我的意图,

class Base {
  public void sayHi() {
    System.out.println("Hi");
  }
}

class ChildOne extends Base {
  public void sayBye() {
    System.out.println("Bye-1");
  }
}

class ChildTwo extends Base {
  public void sayBye() {
    System.out.println("Bye-2");
  }
}

public class MainClass {
  public static <T extends Base> void genericFunction(T child) {
    child.sayBye();
  }

  public static void main(String[] args) {
    ChildOne childOne = new ChildOne();
    ChildTwo childTwo = new ChildTwo();
    genericFunction(childOne);
    genericFunction(childTwo);
  }

}

这段代码是错误的。但我的意图是子类(项目中一些已经存在的类)它们之间具有相似的属性,它们扩展基类并具有 sayBye() 成员函数。

有没有办法将所有子类作为参数传递给泛型函数并调用成员函数 sayBye()(如本例所示)?

最佳答案

当然,您可以为所有具有sayBye 方法的类创建一个公共(public)基类或公共(public)接口(interface)。

然后您可以更改泛型类型参数的类型绑定(bind):

public static <T extends CommonInterface> void genericFunction(T child) {
    child.sayBye();
}

或者没有泛型:

public static void nonGenericFunction(CommonInterface child) {
    child.sayBye();
}

关于Java 泛型 - 有界类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47435349/

相关文章:

java - 异常处理问题

java - 在 Integer.MIN_VALUE、Integer.MAX_VALUE 值之间使用 Arrays.sort 和比较器

java - 用 javax.inject 替换 com.google.inject

c# - 如何将泛型类的对象复制到具有继承类型的另一个对象?

go - 如何从 Go 1.18 中的单个方法返回两种不同的具体类型?

java - 从 Spring bean 获取目录路径?

java - 如何在第二次连接smtp 25端口?

java - Hamcrest 匹配器中的泛型

generics - 有没有办法用 TypeScript 泛型进行传播操作?

java - 类对象的泛型