我目前正在使用第三方库提供的注释,我想知道是否有办法在它周围创建另一个“包装注释”,这样我就不需要所有参数了。
例如,我可以像这样使用库注释:
@LibraryAnnotation(Parameter1, Parameter2, Parameter3)
但在我的情况下,Parameter2和Parameter3总是一样的,所以我想创建一个只接受Parameter1的注释
@MyAnnotation(Parameter1)
但是会使用所有参数调用另一个注释,类似于为第三方方法创建包装器的方式。
答案 0 :(得分:1)
注释非常有限。不幸的是,我没有办法,但我可能错了。
答案 1 :(得分:0)
据我所知,目前有两种方法可以用来做到这一点:
使用面向方面编程和类型间声明来注入新注释,例如:
declare @type : @MyAnnotation package.* : @LibraryAnnotation(..);
但是,这两种选择都非常有限。
答案 2 :(得分:0)
您可以使用基本注释来注释注释,如下例所示:
@Target(value = {ElementType.TYPE})
@Page(method3="someValue")
public @interface Move {
String method1();
String method2();
}
@Target(value = {ElementType.ANNOTATION_TYPE})
public @interface Page{
String method3();
}
答案 3 :(得分:0)
我最初的测试是这样的:
@Test
@SqlGroup(
{
@Sql(
executionPhase = BEFORE_TEST_METHOD,
config = @SqlConfig(transactionMode = ISOLATED),
scripts = {"classpath:test/sqls/_truncate_tables.sql"}
),
@Sql(
executionPhase = AFTER_TEST_METHOD,
config = @SqlConfig(transactionMode = ISOLATED),
scripts = {"classpath:test/sqls/_truncate_tables.sql"}
)
}
)
public void countTeams_countOnEmptyTable_returnsWithEmptyList() {}
我用这个基本注释清理了测试文件:
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SqlGroup(
{
@Sql(
executionPhase = BEFORE_TEST_METHOD,
config = @SqlConfig(transactionMode = ISOLATED),
scripts = {"classpath:test/sqls/_truncate_tables.sql"}
),
@Sql(
executionPhase = AFTER_TEST_METHOD,
config = @SqlConfig(transactionMode = ISOLATED),
scripts = {"classpath:test/sqls/_truncate_tables.sql"}
)
}
)
最后我得到了这个干净的版本:
@Test
@BaseSqlGroup
public void countTeams_countOnEmptyTable_returnsWithEmptyList(){}