2

我正在努力学习genericsjava我看到在类级别我们可以将有界类型参数指定为class Stats <T extends Number>.

假设该类有一个arrayof 类型T和一个average计算它们平均值的T's方法和另一个检查两个对象的平均值是否相同的方法。

但是,在类内部的方法级别,我不能这样做:
boolean isAverageSame(Stats<T extends Number> ob)如果我想发现两个对象的平均值是否相同。

相反,我必须这样做:
boolean isAverageSame(Stats<?> ob)

为什么会这样?这就是语法的定义方式java还是我遗漏了什么?

谢谢。

4

1 回答 1

4

听起来您想为该方法声明一个新的通用参数,在这种情况下您可以使用:

<U extends Number> boolean isAverageSame(Stats<U> ob)

请注意,这将允许您执行以下操作:

Stats<Integer> x = ...;
Stats<Float> y = ...;
boolean z = x.isAverageSame(y);

那是你要的吗?如果您只想将 aStats<Integer>Stats<Integer>(etc) 进行比较,那么您只需要:

boolean isAverageSame(Stats<T> ob)

...换句话说,该方法不会引入另一个泛型类型参数。

于 2014-01-26T17:14:48.410 回答