我想创建一个自定义注释(使用Java),它将接受其他注释作为参数,如:
public @interface ExclusiveOr {
Annotation[] value();
}
Run Code Online (Sandbox Code Playgroud)
但这会导致编译器错误"注释成员的无效类型".
对象[]也不起作用.
有办法做我想要的吗?
我本人特此针对给定问题提出一个解决方法:
嗯,我想让这样的事情成为可能:
@Contract({
@ExclusiveOr({
@IsType(IAtomicType.class),
@Or({
@IsType(IListType.class),
@IsType(ISetType.class)
})
})
})
Run Code Online (Sandbox Code Playgroud)
建议的解决方法:
通过以下方式定义一个具有无参数构造函数的类(稍后将由您自己的注释处理器调用):
final class MyContract extends Contract{
// parameter-less ctor will be handeled by annotation processor
public MyContract(){
super(
new ExclusiveOr(
new IsType(IAtomicType.class),
new Or(
new IsType(IListType.class),
new IsType(ISetType.class)
)
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
@Contract(MyContract.class)
class MyClass{
// ...
}
Run Code Online (Sandbox Code Playgroud)