1

わかりました、私はこのウェブサイトでこの質問を読みましたが、それは私に要点を答えませんでした.

次のようになっているとします。

public <T extends Number> void someMethod(List<T> list)

public void someMethod(List<? extends Number> list)

下限または上限のリスト bound は必要ないと考えてください。では、これらのことを拒否すると、この状況での違いは何ですか? なぜなら ?は不明のリストであり、T は T のリストですが、一方から見ると、この状況では似ています (上記の方法)。

(Ps私はそれの違いを知っていますが、この状況では非常に似ているように見えます。私が考えると、何を使用しても問題ありません。)

4

2 に答える 2

1

List<? extends Number>は、ここで Number を拡張したものを意味します。したがって、次のようなクラスがあるとします

public class  Example<T extends Number> {

public <T extends Number> void someMethod(List<T> list) ...

public <T extends Number> void someOtherMethod(List<T> list) ...

}

public class SomeClass extends Number {
}

public class SomeClass2 extends Number {
}

そして、あなたは次のようなインスタンスを作成しました

Example<SomeClass> myExample =  new Example<SomeClass>();

したがって、ここでメソッドを使用する場合、入力パラメーターはまったく同じクラス SomeClass のインスタンスである必要があり、ここでは SomeClass2 を使用できません。たとえば、次は無効です。

List<SomeClass2> someClass2 =  new ArrayList<SomeClass2>();
example.someMethod(someClass2);

ただし<? extends Number>、 someMethod への入力パラメーターとして使用する場合は可能です。Number、someClass2、3、4、またはその他のクラスを拡張するものは何でも渡すことができます。

于 2013-11-01T15:11:14.250 に答える