为什么类型参数不支持下界?是否有任何特定原因不支持

时间:2019-01-19 06:44:32

标签: java generics

public  <T super Number> void copy(T[] dest, T[] src) {
  for (T t : src) {

  }
}

1 个答案:

答案 0 :(得分:3)

  1. 因为Java语言规范JLS 8.4.4 Generic MethodsJLS 4.4 Type Variables禁止使用它:

    方法返回类型之前的<T>被称为“类型变量”,对于类型变量,仅允许extends

  2. 因为这没有意义。如果某个方法适用于某种类型的T及其所有超级类型(包括Object),为什么它也不能适用于所有其他类型?

    如果允许使用声明,则您对src所知的所有方法是它包含某种Object。具体来说,它不能假设src包含任何类型的Number。但是必须假设src包含Object会破坏泛型的目的,即允许对未知特定类型的对象进行类型安全的操作。