いくつかの複雑なJavaのジェネリックではgetClass()を使用している場合:アイデアは、あなたがに変換するタイプAのメッセージを持っているということですコンパイル型の不一致私はこのインタフェースを持つメソッド持って
public <A extends Message, B extends Message> MessageConverter<A, B>
getDefaultConverterFor(Class<A> inputClass, Class<B> outputClass);
をタイプBのメッセージであり、使用可能な登録済みコンバーターのリポジトリーからそれを行うように変換プログラムを取得したいとします。残念ながら、私はこのタイプのどちらかのタイプを期待どおりに動作させるのに苦労しています。
public <M extends Message> Message convert(M m)
{
MessageConverter<M, DictMessage> converter =
getDefaultConverterFor(m.getClass(), DictMessage.class);
return converter.convert(m);
}
(すなわち任意の型のメッセージを取り、DictMessageに変換)が、それはgetDefaultConverterライン上で私にコンパイルエラーを与える:
具体的、私はこれをやろうとしています
Type mismatch: cannot convert from MessageConverter<capture#1-of ? extends Message,DictMessage> to MessageConverter<Message,DictMessage>".
なぜこのようなことが起こるのか、それを修正する方法はわかりません。私はgetClassによって返されたクラスがMとまったくマッチしないクラスと関係があると思いますが、実際には分かりません。私はこれが実際にはうまくいかない可能性があると信じることができましたが、それを破る特定の例は考えられません...思考?