我正在尝试在generics
中学习java
。我看到在类级别我们可以将有界类型参数指定为class Stats <T extends Number>
。
假设该类有array
类型T
和average
方法来计算那些T's
的平均值,另一种方法来检查平均值是多少boolean isAverageSame(Stats<T extends Number> ob)
两个对象是否相同。
然而,在课堂上的方法层面我不能这样做:
boolean isAverageSame(Stats<?> ob)
如果我想找到两个对象的平均值相同或不同。
相反,我必须这样做:
java
为什么会这样?这只是在{{1}}中定义语法的方式还是我遗漏了什么?
感谢。
答案 0 :(得分:4)
听起来你想要为方法声明一个新的泛型参数,在这种情况下你可以使用:
<U extends Number> boolean isAverageSame(Stats<U> ob)
请注意,这将允许您执行以下操作:
Stats<Integer> x = ...;
Stats<Float> y = ...;
boolean z = x.isAverageSame(y);
这就是你想要的吗?如果您只想将Stats<Integer>
与Stats<Integer>
(等)进行比较,那么您只需要:
boolean isAverageSame(Stats<T> ob)
...换句话说,该方法不会引入另一个泛型类型参数。