【问题标题】:Marker interface or annotations?标记界面或注释?
【发布时间】:2011-12-01 20:31:53
【问题描述】:

我需要将一些类标记为 Invokable - 只是为了告诉我可以使用反射调用该类的方法。但我不喜欢仅仅为此目的而拥有一个空界面的想法。这可以通过注释来完成,并且仍然保留下面示例中的行为吗? (我从来没有创建过自己的注解,所以对它们不是很熟悉)

Example

class ClassOne implements Invokable {
}

class ClassTwo implements Invokable {
}

void someMethod(Invokable inv) {
}

【问题讨论】:

    标签: java interface annotations


    【解决方案1】:

    因为someMethod,不能使用注解。也许稍后你会发现Invokable 无论如何可能需要有用的方法。

    另外,在重新发明轮子之前,请务必检查已经存在的接口,例如 CallableFuture 等。

    【讨论】:

    • 如果我理解的话,注释就像一些根本不影响设计的属性,是吗?然后我使用接口。谢谢你的澄清。
    • 是的,但在您的情况下,关键是您不能轻易地将它们用作类型。例如,如果您将某个类标记为@Foo,这意味着该类实现Foo接口。
    【解决方案2】:

    您可以通过 Class.getAnnotations() 获取类的注释并搜索您的 Invokable 注释。然后你就可以得到你要调用的方法,并调用它。

    【讨论】:

      【解决方案3】:

      决定将取决于您将如何使用这些类。如果你有很多类,有些是可调用的,有些不是,你最好使用注释,只需传递对象/类并检查注释。如果您知道要传递的类都是可调用的,则可以使用标记接口。

      即假设您只想保留行为而不是方法:-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多