2011-12-18 8 views
0

クラスとその一般的なセマンティクスに関する簡単な質問。なぜ次のコードは機能しませんか?ジェネリックとしてのJavaクラスクラスが期待どおりに機能しない

Class<Serializable> s = String.class; 

JavaはClass<Serializable>Class<String>に互換性がないことを私に伝えます。 StringSerializableを実装しているとき、どうすればいいですか?

ジェネリックスがこの種のものを正確に許可してはいけませんか?

答えて

3

Class<String>Class<Serializable>ではないためです。しかし、Class<String>Class<? extends Serializable>

+0

私は '?extends'セマンティクスについて知らなかった。ありがとう! –

3

いいえ、ジェネリックは明示的にではありませんはこのようなことを許可します。古典的な例は何らかのコレクションクラスです。 ArrayList<String>ArrayList<Serializable>のサブクラスだった場合、あなたは、このコードの後

ArrayList<String> astr = new ArrayList<String>(); 
ArrayList<Serializable> aser = astr; 
aser.add(new Integer()); 
// This will throw ClassCastException! 
String str = astr.get(0); 

を書くことができ、あなたはIntegerオブジェクトを格納するArrayList <文字列を>()持っている - これは明らかに良くありません。

関連する問題