我有以下「通用」問題有一個類實現java中未指定的通用接口
這是我的通用消息接口。
public interface Message<P,R> {
void setParams(P Params); // and the corresponding getter
void setResults(R results);
}
爲了簡單起見,我想通過預定義參數和結果類型來指定消息的數量(接口)。所以,如果你使用消息X,你知道參數和結果類型是什麼。
如
public interface MyMessage extends Message<String,String> {}
這工作正常,現在我想有一個共同的基類,它可以實現任何消息。
public class BaseMessage<P,R> implements Message<P,R> {
P param;
R results;
// base implementation
}
現在上面的問題是我不能有一個實現MyMessage的BaseMessage。
像
public class BaseMessage<T extends BaseMessage<P,R>> implements Message<P,R>
或
public class BaseMessage<? extends BaseMessage<P,R>> implements Message<P,R>
多次嘗試將無法正常工作,因爲編譯器抱怨P和R未綁定。 將它們作爲附加參數引入時會再次起作用,但此時所得到的類將不能被轉換爲BaseMessage或所需的MyMessage。
public class BaseMessage<P,R,T extends BaseMessage<P,R>> implements Message<P,R>
我想有一個通用工廠方法,該方法將被給予所述消息類,參數和結果對象並且將返回BaseMessage的一個實例,其實現了MyMessage接口。像在以下內容
public static <P, R, T extends Message<P,R>> T factory(Class<T> clazz,P p,R r) {
T a = (T) new BaseMessage<P,R>();
// create a BaseMessage which which Implements T
a.setParams(p);
a.setResults(r);
return a;
}
任何人都遇到過類似的問題,或者是在Java中不可能的東西?
謝謝!
'公共接口MyMessage擴展BaseMessage'這是行不通的,在你的例子中BaseMessage是一個類。 – Cephalopod 2010-09-29 10:13:56
感謝您的評論,它應該確實讀取 公共接口MyMessage擴展消息<字符串,字符串> {} – Joey 2010-09-29 10:33:53