我不太确定Java注释,但是我认为它们可以解决我的问题。

我有一个Java接口“ Target”。这是一个空接口,因此我可以将该实现放到“ TargetHolder”中,它只是Target的列表。

现在我只有2种目标类型。键入“ Alpha”,然后键入“ Beta”。

类型“ Alpha”与类型“ Beta”没有共同的功能。

最简单的方法是从“ Target”扩展“ Beta”和“ Alpha”。但是使用此解决方案,程序员可以创建仅扩展“ Target”的类,而这是不可能的。


我可以用注释解决吗?
怎么样?

最佳答案

从理论上讲,您可以使用注释处理器来实现检查(在编译时)。问题是,javac仅在源文件中找到正确种类的注释时,才会在源文件上运行注释处理器。


“在命令行上扫描源文件和类以确定存在哪些注释后,编译器会查询处理器以确定它们处理的注释。找到匹配项后,将调用处理器。”


(Javac手册)

但是似乎您想在接口上使用注释来约束实现该接口的所有类。这意味着要检查所有这些类...但是我看不到如何在没有相关注释的类上触发注释处理器的运行。

这给您提供了两个选择:


将检查实施为(例如)PMD规则。
编写工具以在运行时找到相关的接口,检索其注释,然后对实现带注释的接口的所有类进行拖网。




我的建议是将其放入“太硬”的篮子中。实现此功能的时间可能要比您早些拾起相关编码错误所节省的时间更多。 (我认为,当有人尝试使用类时,您将要避免的情况将会出现。因此,您(或您的客户)应该在测试中找到(他们的)错误的类...)

09-30 15:49
查看更多