我不太确定Java Annotations,但我认为它们可以解决我的问题。
我有一个java界面“Target”。这是一个空接口,所以我可以将该实现提供给“TargetHolder”,它只是一个目标列表。
现在我只有两种目标。输入“Alpha”并输入“Beta”。
“Alpha”类型与“Beta”类型没有共同的功能。
最简单的方法是从“目标”扩展“Beta”和“Alpha”。但是使用这个解决方案,程序员可以创建一个仅扩展“目标”的类,这是不可能的。
答案 0 :(得分:1)
理论上,您可以使用注释处理器实现检查(在编译时)。问题是javac只会在源文件中运行注释处理器,如果它在源文件中找到正确的类注释。
“在命令行上扫描源文件和类以确定存在哪些注释后,编译器会查询处理器以确定它们处理的注释。当找到匹配时,将调用处理器。”
(Javac手册)
但似乎您希望在接口上使用注释来约束实现该接口的所有类。这意味着要检查所有这些类......但是我看不出如何在没有相关注释的类上触发注释处理器的运行。
这给你留下了几个选择:
我的建议是把它放到“太难”的篮子里。实现这一点可能需要花费更多时间,而不是在以前提取相关编码错误时节省的时间。 (我正在考虑当有人试图使用类时,你试图避免的情况会被接收。所以,你(或你的客户)应该在测试中找到你的(他们的)不正确的类...)
答案 1 :(得分:0)
怎么样?
答案 2 :(得分:0)
使用像JArchitect这样的工具可以强制执行设计规则。 在您的情况下,您可以使用以下cqlinq查询:
warnif count > 0 from t in Types where t.Implement ("Target")
&& (!t.Implement("Alpha")|| !t.Implement("Beta"))
select t