2011-02-10 37 views
1

設計通用接口時,我可以在枚舉上使用標記註釋嗎?
或者,是否可以在編譯時鍵入檢查註釋引用?在枚舉上使用標記註釋的通用接口設計

我正在開發一組接口來處理消息,每個消息將包含消息類型和消息內容。 我想將消息類型編碼爲枚舉,然後在此基礎上定義其他接口。事情是這樣的,

public interface MessageHandler<E extends Enum<E>> { 

    boolean handles(E messageType); 
} 

我不希望任何枚舉用在這裏,我可以添加一個標記接口MessageType像這樣,

public interface MessageHandler<E extends Enum<E> & MessageType> { 

    boolean handles(E messageType); 
} 

據我所知,標記註釋是最好的標誌接口這些天,但我看不到在這裏使用它們。這是可能的還是我只是堅持接口?

+2

我前段時間曾經有過類似的情況,最後證明需要'MessageType`作爲`enum`只提供了很少的附加優點,同時使接口更難讀。放棄這個要求比較容易,但仍然只使用'MessageType`的枚舉對象。 – 2011-02-10 13:41:41

回答

1

註解被濫用像XML一樣。爲什麼「標記註釋」如果一個接口完美表達了類型?

在你的情況,沒有必要處理程序需要一個枚舉類型。它爲什麼在乎?你可能確實擁有所有的消息類型作爲枚舉,但它不是超級處理接口的業務。每個子處理程序都知道它處理的類型,它可以處理enum和whatnot。

enum TypeX implements MessageType 
{ 
    X1, 
    X2 
} 

class HandlerX extends Handler<TypeX> 
    handle(TypeX type) 
     if(type==X1) 
     ... 

---- 

class TypeY implements MessageType 
{ 
    int x; 
} 

class HandlerY extends Handler<TypeY> 
    handle(TypeY type) 
     if(type.x==0) 
     ...