问题:为什么不能使用“super”关键字绑定类型参数,与通配符不同?
答案:
不允许使用“super”(例如“”)来限制类型参数Java,因为它实际上对类型绑定的影响可以忽略不计,并且不会达到其预期目的。
考虑以下假设的代码:
interface Collection<T> { <S super T> S[] toArray(S[] a); }
此代码建议使用 'toArray' 方法在“Collection”接口中应该有一个类型参数“S”,它是“T”的超类型。然而,这个界限是没有意义的,因为每个类型都是“Object”的超类型,并且由于任何引用类型的数组都可以转换为“Object[]”,编译器将允许将任何数组作为参数传递给'toArray',无论它是否是预期的子类型。
因此,使用 'super' 绑定类型参数不会防止运行时错误,例如 'ArrayStoreException'。因此,它在 Java 的类型系统中是不允许的。
示例:
考虑一个假设的泛型方法:
<T super Integer> void add(T number)
此方法旨在允许添加“整数”、“数字”和“对象”(因为它们都是“整数”的超类),但不允许添加“字符串”,因为它们不是。但是,由于“Object”是“Integer”的超类,因此仍然可以通过隐式转换添加“string”,从而导致潜在的运行时错误。
其他注意事项:
相关资源:
Java 教程/泛型
以上是为什么不能使用“super”关键字来绑定 Java 泛型中的类型参数?的详细内容。更多信息请关注PHP中文网其他相关文章!