Java 对方法的形式参数使用类级别的泛型有界类型参数

Java 对方法的形式参数使用类级别的泛型有界类型参数,java,generics,method-parameters,bounded-types,Java,Generics,Method Parameters,Bounded Types,我正在努力学习java中的泛型。我看到在类级别,我们可以将有界类型参数指定为类统计信息 假设这个类有一个类型为T的数组和一个平均方法来计算这些T的平均值,还有另一个方法来检查两个对象的平均值是否相同 但是,在类内部的方法级别,我不能这样做: 如果我想发现两个对象的平均值是否相同,布尔值IsAveragesamests ob 相反,我必须做: 布尔ISaveragesamests ob 为什么会这样?这就是java中定义语法的方式,还是我遗漏了什么 谢谢。听起来您想为该方法声明一个新的泛型参数,在

我正在努力学习java中的泛型。我看到在类级别,我们可以将有界类型参数指定为类统计信息

假设这个类有一个类型为T的数组和一个平均方法来计算这些T的平均值,还有另一个方法来检查两个对象的平均值是否相同

但是,在类内部的方法级别,我不能这样做: 如果我想发现两个对象的平均值是否相同,布尔值IsAveragesamests ob

相反,我必须做: 布尔ISaveragesamests ob

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


谢谢。

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

<U extends Number> boolean isAverageSame(Stats<U> ob)
请注意,这将允许您执行以下操作:

Stats<Integer> x = ...;
Stats<Float> y = ...;
boolean z = x.isAverageSame(y);
这就是你想要的吗?如果您只想比较统计数据与统计数据等,那么您只需要:

boolean isAverageSame(Stats<T> ob)

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

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

<U extends Number> boolean isAverageSame(Stats<U> ob)
请注意,这将允许您执行以下操作:

Stats<Integer> x = ...;
Stats<Float> y = ...;
boolean z = x.isAverageSame(y);
这就是你想要的吗?如果您只想比较统计数据与统计数据等,那么您只需要:

boolean isAverageSame(Stats<T> ob)

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

方法级别是什么意思?这是类内的方法还是类外的其他泛型方法?方法级别是什么意思?这是类内的方法还是类外的其他泛型方法?因此,它是语法的一部分。对我来说,这确实有点多余。为什么我不能在参数本身中声明?编辑:-是的,我希望该方法适用于所有属于Number子类型的对象。@JakeFoster:该方法的一部分是声明type参数,另一部分是声明参数的类型。在某些情况下,这些情况会有所不同。例如,假设您想要声明一个类型参数和一个类型参数为?或者您可能希望在两个不同的参数中使用类型参数,这也会很尴尬-您会将约束放在哪里?将两者分开对我来说很有意义。@JakeFoster:是的,如果您不需要引用方法中的类型,那就好了。@linuxNoob:约束是在引入泛型类型参数的地方表达的,而不是在使用它们的地方。@linuxNoob:是的,但是在声明匿名类型参数的地方。。。不在已经存在的类型参数上。因此,它是语法的一部分。对我来说,这确实有点多余。为什么我不能在参数本身中声明?编辑:-是的,我希望该方法适用于所有属于Number子类型的对象。@JakeFoster:该方法的一部分是声明type参数,另一部分是声明参数的类型。在某些情况下,这些情况会有所不同。例如,假设您想要声明一个类型参数和一个类型参数为?或者您可能希望在两个不同的参数中使用类型参数,这也会很尴尬-您会将约束放在哪里?将两者分开对我来说很有意义。@JakeFoster:是的,如果您不需要引用方法中的类型,那就好了。@linuxNoob:约束是在引入泛型类型参数的地方表达的,而不是在使用它们的地方。@linuxNoob:是的,但是在声明匿名类型参数的地方。。。不在已存在的类型参数上。