Java 接受n个参数的注释
我希望能够调用具有任意多个参数的注释,如下所示:Java 接受n个参数的注释,java,annotations,Java,Annotations,我希望能够调用具有任意多个参数的注释,如下所示: @Authorize("Admin", "Moderator", "User") public static void read() { // ... } 到目前为止,我的注释如下: @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) public @interface Authorize { String[] v
@Authorize("Admin", "Moderator", "User")
public static void read() {
// ...
}
到目前为止,我的注释如下:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Authorize {
String[] value() default {};
}
但您可能知道,这只适用于:
@Authorize
@Authorize("Admin")
@Authorize({"Admin", "Moderator", "User"})
事实上,前两个对我来说很好,最后一个让我烦恼
原因很简单
对于权限,我希望有一个方法可用于许多配置文件,{}表示“WITH”,我正在寻找一个“OR”;)
(在我看来){}的意思是“WITH”,因为它是“作为一个包”。链接在一起的项目。例如,如果您采取以下措施:
SomeQuery.select({"A", "B", "C"}, {"D", "E", "F"}, {"G", "H", "I"})
我将其翻译为:
SELECT WHERE (A, B, C) OR (D, E, F) OR (G, H, I);
(这不是一些SQL查询,只是我如何看待{}和With/Or的一个示例)
谢谢 据我所知,你做不到 获得等价物的一种方法是使用
@Authorize({"A,B,C", "D,E,F", "G,H,I"})
在底层实现中,如果需要单独的组件:
String[] component = x.value[idx].split(",");
这里的分隔符是逗号,但可以是任何内容,具体取决于您的要求/限制
问候。据我所知,你做不到 获得等价物的一种方法是使用
@Authorize({"A,B,C", "D,E,F", "G,H,I"})
在底层实现中,如果需要单独的组件:
String[] component = x.value[idx].split(",");
这里的分隔符是逗号,但可以是任何内容,具体取决于您的要求/限制
问候。您可以执行以下操作
public @interface Authorize {
String[] value();
}
public @interface Packages {
Authorize[] value();
}
所以你本来可以
@Packages({
@Authorize({"A", "B", "C"}),
@Authorize({"D", "E", "F"}),
@Authorize({"G", "H", "I"})
})
public void myMethod()
或
(其中第二种形式仅为:)
你可以做以下事情
public @interface Authorize {
String[] value();
}
public @interface Packages {
Authorize[] value();
}
所以你本来可以
@Packages({
@Authorize({"A", "B", "C"}),
@Authorize({"D", "E", "F"}),
@Authorize({"G", "H", "I"})
})
public void myMethod()
或
(其中第二种形式仅为:)
实际上,是文档定义了注释的含义,JDK根本不知道也不关心。如果你在找其他人的两个铜币,在我第一次读到你的问题时,我假设列表是OR,而不是AND。在任何情况下,如果希望完全明确,请以自文档的方式声明注释:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Authorize {
/**
* Roles to authorize. By default, any of the roles specified
* will be accepted as authorization
*/
String[] value() default {};
/**
* Roles to authorize. Any matched role in the list will be accepted
* as authorization.
*/
String[] anyOf() default {};
/**
* Roles to authorize. All roles in the list must match to be accepted
* as authorization.
*/
String[] allOf() default {};
}
实际上,是文档定义了注释的含义,JDK根本不知道也不关心。如果你在找其他人的两个铜币,在我第一次读到你的问题时,我假设列表是OR,而不是AND。在任何情况下,如果希望完全明确,请以自文档的方式声明注释:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Authorize {
/**
* Roles to authorize. By default, any of the roles specified
* will be accepted as authorization
*/
String[] value() default {};
/**
* Roles to authorize. Any matched role in the list will be accepted
* as authorization.
*/
String[] anyOf() default {};
/**
* Roles to authorize. All roles in the list must match to be accepted
* as authorization.
*/
String[] allOf() default {};
}
{}表示“WITH”
,您能详细说明一下吗?这取决于实现,它是一个集合,“WITH”或“or”完全取决于开发人员!在您的更新示例中,您强调了我提到的具体实现。{}表示“WITH”
,您能详细说明一下吗?这取决于实现,它是一个集合,“WITH”或“or”完全取决于开发人员!在您的更新示例中,您强调了我提到的具体实现,我喜欢在子类中拆分权限的想法,因此,您强调了{}并不一定意味着“with”。但我发现这种技术在代码方面更为繁重,我喜欢在子类中拆分权限的想法,因此,您强调了{}并不一定意味着“with”。但我发现这项技术在代码方面更为繁重。这是一个好主意,但如果我想要其他东西(比如枚举),而不是字符串,它会变得更复杂。虽然这仍然是可能的,但我想用一种更简单的方法来做(而不是解析每个字符串,尝试查看它们是否存在于枚举中等等)。这是一个好主意,但是如果我想要别的东西(比如枚举),而不是字符串,那么它会变得更复杂。虽然这仍然是可能的,但我希望使用一种更简单的方法来实现(而不是解析每个字符串,尝试查看它们是否存在于枚举中等等)。这非常有趣!谢谢这很有趣!谢谢