Java:如何简化复杂的注解

标签 java annotations

我们有一个相当复杂的注释结构,可以放在一个字段上。这种结构被放置在很多字段上,只有 1 个参数发生变化。剩下的只是复制粘贴代码。这种方法有效,但有点难看:

@Type(type = "com.company.ConstantClass", parameters = @Parameter(name = "parameterClass", value = "com.company.ChangingClass"))
ChangingClass parameter;

在上面的例子中,只有参数 value 会改变,其余的只是复制粘贴。

我想做的是创建一个只有 value 参数的“快捷方式”注释。当我们这样做时,参数可以从 String 更改为 Class,以使代码不易受重构错误的影响。

例如:

@Shortcut(value = ChangingClass.class)
ChangingClass parameter;

一个问题是@Type注解只能放在字段或方法上,所以我不能简单地创建一个“带注解的注解”。

最佳答案

你问的是不可行的。 您可以做的是指定默认值。

public @interface Type
{
   String type() default "com.company.ConstantClass";
   Parameter parameter();
}

public @interface Parameter
{
   String name() default "parameterClass";
   String value();
}

我认为结果很干净。

@Type(parameter = @Parameter("com.company.ChangingClass"))
private ChangingClass parameter;

或者,您必须重构提取注释值的代码以使用默认值。这样您就可以拥有仅具有单个属性的注释。

关于Java:如何简化复杂的注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48386072/

相关文章:

java - 处理数据库:良好的软件工程概念

java - 子线程返回值

Java注释在编译时构建.class

azure - 在 Azure Function 中找不到注释 System.ComponentModel.Annotations

java - @SuppressWarnings ArrayList<X> 可能不包含类型 Y 的对象

hibernate - 是否可以使@Formula注释延迟加载?

java - 较低 API 级别的 Android 安全性

java - 将 JSON 转换为 Java 类(从 Android 应用程序调用 WebApi)

java - 使用 Java 从远程服务器下载文件夹

php - 使用 Symfony 和 Doctrine 创建多个表