使用以下注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Param {
String value();
}
和常数类:
public final class ExampleConstants {
public static final String classConstant = "classConstant";
public static final String methodConstant = "methodConstant";
public static final String paramConstant = "paramConstant";
}
以下课程:
import com.example.annotations.Control;
import com.example.annotations.Param;
import com.example.annotations.Task;
import static com.example.ExampleConstants.*;
@Task(value = classConstant)
public class ExampleClass {
@Control(methodConstant)
public Object control(@Param(paramConstant) ExampleParam paramConstant) {
return null;
}
}
无法使用错误进行编译:
Error:(12, 34) java: incompatible types
required: java.lang.String
found: com.example.ExampleParam
如果我将@Param注释声明更改为不使用静态导入,则按预期编译:
public Object control(@Param(ExampleConstants.paramConstant) ExampleResult paramConstant)
我正在寻求以下方面的澄清:
答案 0 :(得分:2)
没有限制注释值不能进行静态和/或通配符导入。
错误表明该值属于ExampleParam
类型 - 此处的问题是方法的参数与导入的常量具有相同的名称:paramConstant
在ExampleConstants.paramConstant
的示例中,值更具体,因此不再隐藏。
重命名参数,因此它不会再隐藏导入的值:
public Object control(@Param(paramConstant) ExampleParam exampleParam)