我知道这个主题有几个线程,但我不知道我的问题出在哪里。上下翻阅搜索结果,我比以往任何时候都更加困惑。我希望我能把我的问题说清楚。
我有一个消息类型层次结构,并且我有这些消息的通用处理器层次结构。这是我到目前为止运行的。现在我想为处理器实现一个工厂方法,并坚持使用我选择的通用方法。请看我的例子:
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);
}
}
}
也许这是我在这里犯的一个愚蠢的失败,但我看不到它。如果有人能给我一个提示,我将不胜感激。
问候
塞巴斯蒂安
编辑:好吧,我的错。问题是我得到的编译器错误表示为“默认语言环境”的注释(例如,对于第二个返回语句,我得到编译错误):
类型不匹配:无法从 MyMessage2Processor 转换为 Processor