2

で学ぼうとしてgenericsjavaます。クラス レベルでは、制限付きの型パラメーターを として指定できることがわかりましたclass Stats <T extends Number>

クラスにarrayof 型Taverageそれらの平均を計算するメソッド、T'sおよび 2 つのオブジェクトの平均が同じかどうかをチェックする別のメソッドがあるとします。

ただし、クラス内のメソッド レベルでは、これを行うことはできません
boolean isAverageSame(Stats<T extends Number> ob)。2 つのオブジェクトの平均が同じかどうかを調べたい場合。

代わりに、私はしなければなりません:
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);

それはあなたが望むものですか?Stats<Integer>aと a (etc)のみを比較できるようにしたい場合はStats<Integer>、次のものが必要です。

boolean isAverageSame(Stats<T> ob)

... 言い換えれば、メソッドは別のジェネリック型パラメーターを導入しません。

于 2014-01-26T17:14:48.410 に答える