このトピックにはいくつかのスレッドがあることは知っていますが、問題がどこにあるのか理解できませんでした。検索結果を上下に読むと、これまで以上に戸惑います。問題を明確にできるといいのですが。
メッセージタイプ階層があり、これらのメッセージの汎用プロセッサ階層があります。これは私がこれまで実行してきました。ここで、プロセッサのファクトリメソッドを実装し、選択した一般的なアプローチに固執したいと思います。私の例を見てください:
abstract class Message
{
abstract int getTest();
}
class MyMessage1 extends Message
{
@Override
int getTest()
{
return 1;
}
}
class MyMessage2 extends Message
{
@Override
int getTest()
{
return 2;
}
}
interface Processor<T extends Message>
{
void initialize(final T p_message);
void doWork();
}
abstract class BaseMessageProcessor<T extends Message> implements Processor<T>
{
private T message;
@Override
public void initialize(T p_message)
{
message = p_message;
}
protected T getMessage()
{
return message;
}
}
class MyMessage1Processor extends BaseMessageProcessor<MyMessage1>
{
@Override
public void doWork()
{
// perfectly valid assignment
MyMessage1 msg = getMessage();
// do something
}
}
class MyMessage2Processor extends BaseMessageProcessor<MyMessage2>
{
@Override
public void doWork()
{
// perfectly valid assignment
MyMessage2 msg = getMessage();
// do something
}
}
これまでのところ、これは有効であり、期待どおりに機能しています。しかし今、工場がやってくる:
class ProcessorFactory
{
<T extends Message> Processor<T> createProcessor(final Class<T> p_msgType)
{
if (p_msgType.equals(MyMessage1.class))
{
// Type mismatch: cannot convert from MyMessage1Processor to Processor<T>
return new MyMessage1Processor();
}
else if (p_msgType.equals(MyMessage2.class))
{
// Type mismatch: cannot convert from MyMessage2Processor to Processor<T>
return new MyMessage2Processor();
}
else
{
throw new Exception("Unsupported message type: " + p_msgType);
}
}
}
多分それは私がここで作っている愚かな失敗ですが、私はそれを見ることができません。誰かが私にヒントを与えることができれば、私は感謝するでしょう。
よろしく
セバスチャン
編集:OK私のせい。問題は、「デフォルトのロケール」としてコメントとして記述されたコンパイラエラーが発生することです(たとえば、2番目のreturnステートメントの場合はコンパイルエラーが発生します)。
タイプの不一致:MyMessage2ProcessorからProcessorに変換できません