狭义范围内的Java注释

时间:2017-03-18 04:59:26

标签: java annotations code-organization

如果我们有一个用于设置某些特定于类的常量的注释,则以这种方式声明:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Tooltip {
  String value();
}

像这样使用:

package applicationroot

@Tooltip("createCubeTool.tipText")
public class CreateCubeTool extends EditingTool
{
}

使用超类型:

public abstract class EditingTool
{
  public String getToolTipText()
  {
    //Don't worry about this, other than that it requires a custom value Per Concrete class.
    return null == tooltip ? null : Translate.text(tooltip.value());
  }
}

哪里应该声明注释?

除了关于项目整体结构的问题外,我想到这个特定的注释只适用于ModelingTool类型范围的子类。在一个完全独立的包中声明它是否有意义,package applicationroot.tool.annotations;作为一个贡献者建议,还是更好地声明为使用它的ModelingTool类型的成员?

到目前为止,我发现的所有引用都讨论了如何来声明自定义注释,而不是它们适合项目整体结构的位置。

1 个答案:

答案 0 :(得分:0)

通常,如果text由于某些原因是可变的,例如它需要在输出之前进行格式化或转换,将其声明为实例成员可能是更好的主意。

相反,可以在注释的元信息中定义决定的 CONSTANT 。值得注意的是,您必须使用 reflection 来获取可能降低性能的元信息。 反射会带来深度调用堆栈。

在这种情况下,我认为使用注释是不值得的。除了表面上优雅的代码之外,你对重构没什么好处。