私はC++や他の言語で多くの経験を持っていますが、私はJavaでかなり新しいです。テンプレート/ジェネリックは私が知らないものではありません。Javaでジェネリックを使用する場合、なぜ<?>を指定する必要がありますか?
ありしかし私を気に何かがだ、それは私が、私はそれがされる特定のタイプの事前に知っていないとき、私は私が何かの一般的なインスタンスを使用するたびに使用する必要があると言われたというこの<?>
です:
同様:
List<MyGeneric> foo; // bad
List< MyGeneric<?> > bar; // good
最初の式を使用した場合のIntelliJは私に嘔吐しない、そしてなぜそれが必要私は理解していません。私の同僚は、2番目の表現がであり、それ以上にはであると表現していますが、その理由を正確には伝えられませんでした。
私たちが操作するジェネリックであるという事実について明示されている点を除き、これらの2つの違いはどういう意味ですか?
コンパイラは確かにが、それはコンパイル時にジェネリックであることを知っているが、そう私の推測では、それは彼がジェネリックを操作しているプログラマに伝えるため、2番目の式は唯一優れていることです。
私は正しいですか?
編集:私は、私はそこに格納するつもりです何を事前に知っていたときには明確化のために、私はovbiously、List<MyGeneric<Double>>
のように、最も制限のタイプを使用しています。私の質問は、未知の種類のジェネリックを保存するときです。
"私は何かの一般的な例を使うたびに私は使うべきだと言われました。"メッセンジャーを撃つ!そして... "私の同僚たちは、2番目の表現がはるかに優れていると表明しましたが、正確になぜそれを伝えることはできませんでした。自分の議論を裏付けることができない人々と話している。議論する – ChiefTwoPencils
最初のものが悪い理由の単純な例: 'for(MyGeneric obj:foo){}'を使ってリストを反復し、あなたは生の 'MyGeneric'インスタンスを持っています。 –
それはあなたがnullではないすべての型を渡すことができます –