使用以下注释:
@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)
我正在寻找以下方面的澄清:
对于注释值不能具有静态和/或通配符导入没有限制。
错误表明值是类型ExampleParam
-这里的问题是方法的参数与导入的常量具有相同的名称:paramConstant
在带有的示例中,该ExampleConstants.paramConstant
值更具体,因此不再隐藏。
重命名参数,因此它不再隐藏导入的值:
public Object control(@Param(paramConstant) ExampleParam exampleParam)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句