我知道這個主題有幾個線程,但我無法弄清楚我的問題在哪裏。上下搜索搜索結果我比以往更加困惑。我希望我能讓我的問題清楚。Java中的通用工廠方法
我有一個消息類型層次結構,我有這些消息的通用處理器層次結構。這我已經跑了。現在我想爲處理器實現一個工廠方法,並堅持使用我選擇的通用方法。請看我的例子:
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);
}
}
}
也許這是一個愚蠢的失敗,我在這裏,但我看不到它。如果有人能給我一個提示,我會很感激。
問候
塞巴斯蒂安
編輯: 確定我的錯。問題是,我得到的陳述爲評論提到「默認語言環境」(例如,第二return語句我得到的編譯錯誤)的編譯器錯誤:
類型不匹配:不能從MyMessage2Processor轉換爲處理器
有什麼問題? – 2012-07-18 06:57:34
第二個代碼部分有評論。我相信他們表達了問題的問題 – 2012-07-18 06:58:23
我有一個問題,所以我想用Java。現在我有一個ProblemFactory – 2012-07-18 06:58:58