java - 在枚举上使用标记注释的通用界面设计

标签 java generics enums annotations

设计通用接口(interface)时可以在枚举上使用标记注释吗?
或者,是否可以在编译时键入检查注释引用?

我正在开发一组处理消息的接口(interface),每个消息将由消息类型和消息内容组成。 我想将消息类型编码为枚举,然后基于此定义其他接口(interface)。像这样的事情,

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

    boolean handles( E messageType );
}

我不想在这里使用任何枚举,我可以像这样添加一个标记接口(interface)MessageType

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

    boolean handles( E messageType );
}

我知道现在标记注释比标记接口(interface)更可取,但我认为这里没有办法使用它们。有可能吗,还是我只能坚持使用界面?

最佳答案

注释像 XML 一样被滥用。如果接口(interface)完美地表达了类型,为什么要使用“标记注释”?

在您的情况下,处理程序不需要枚举类型。它为什么关心?您确实可能将所有消息类型都作为枚举,但这与 super 处理程序接口(interface)无关。每个子处理程序都对其所处理的类型有深入的了解,它可以处理枚举等。

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) 
         ...

关于java - 在枚举上使用标记注释的通用界面设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4957752/

相关文章:

具有通用类型的快速扩展函数 - isEmpty for FetchedResults

swift - Swift 编程语言 - 泛型 - Where 子句的问题

java - 如何使用 jmockt 在 Enum 类中模拟它?

java - 尝试打印表中的数据时出现 SAXParseException

java - 在 Jetty 9 中使用没有密码的数据源时出错

c# - 将 SelectedItems 转换为 IEnumerable<MyType>

C#:获取枚举名称作为字符串

c# - MVC5 : Enum radio button with label as displayname

java - 将整数编码为字节字符串

java - 康威的生命游戏没有按预期进行