これは、候補者が Java 言語に追加されることを望んでいたものとして、最近のインタビューで私が尋ねた質問として出てきました。Java が具体化されたジェネリックを持っていないことは、一般的に苦痛として認識されていますが、プッシュされたとき、候補者は実際に私に、それらがあった場合に達成できたであろう種類のことを教えてくれませんでした。
明らかに、生の型は Java (および安全でないチェック) で許容されるため、ジェネリックを覆してList<Integer>
、(たとえば) 実際にString
s を含む になる可能性があります。型情報が具体化されていれば、これは明らかに不可能になる可能性があります。しかし、これ以上のものがあるに違いありません!
人々は本当にやりたいことの例を投稿できますか?具体化されたジェネリックが利用可能でしたか? つまり、実行時に a の型を取得できることは明らかですが、List
それをどうするのでしょうか?
public <T> void foo(List<T> l) {
if (l.getGenericType() == Integer.class) {
//yeah baby! err, what now?
編集:回答は主にパラメータとして a を渡す必要性について懸念しているように見えるため、これを簡単に更新しClass
ます(たとえば、EnumSet.noneOf(TimeUnit.class)
)。これが不可能な線に沿って何かをもっと探していました。例えば:
List<?> l1 = api.gimmeAList();
List<?> l2 = api.gimmeAnotherList();
if (l1.getGenericType().isAssignableFrom(l2.getGenericType())) {
l1.addAll(l2); //why on earth would I be doing this anyway?