了解しました。Javaでは次のことは許可されていません。
Foo<?> hello = new Foo<?>();
これは理にかなっています-結局のところ、とにかくすべてをボックス化/ボックス化解除するだけの場合、ジェネリックスのポイントは何ですか?
奇妙なことに、Javaはこれを許可します:
Foo<Bar<?>> howdy = new Foo<Bar<?>>();
確かに、これは実際にはより多くのことを達成しますが、ある時点で、Bar
動作しているものを取得するためのキャストがあります。しかし、Javaにある程度の特異性があれば、なぜこれが許可されないのでしょうか。
Foo<? extends Mal> bonjour = new Foo<? extends Mal>();
私が尋ねる唯一の理由は、「コンストラクターのクラスパラメーター内のワイルドカード」に依存するように修正していることであり、その背後にある意味/意図を真剣に知りたいと思っています。
編集:私の質問を明確にするために、これらのステートメントはどのような理由で許可/禁止されていますか?「Javaはコンストラクターでワイルドカードを許可しない」ことは知っていますが、問題は、なぜこのような奇妙なことなのかということです。ネストされたワイルドカードで問題がないのに、制限付きワイルドカードが許可されないのはなぜですか?