如何在 Kotlin 中表达数组注释参数?
How to express array annotation argument in Kotlin?
当注解具有基本类型(如 String 或 Int)的数组参数时,使用方法很简单:
public @interface MyAnnotation{
String[] props();
}
@MyAnnotation(props = ["A", "B", "C"])
class Foo {}
不幸的是,这不适用于本身是注释的值。
一个例子是org.springframework.context.annotation.PropertySources
:
public @interface PropertySources {
PropertySource[] value();
}
public @interface PropertySource {
String[] value();
}
在Java中语法用法是
@PropertySources({
@PropertySource({"A", "B", "C"}),
@PropertySource({"D", "E", "F"}),
})
class Foo{}
但在 Kotlin 中,类似方法的代码无法编译
@PropertySources([
@PropertySource(["A", "B", "C"]),
@PropertySource(["D", "E", "F"]),
])
class Foo{}
这种注解数组嵌套构造在Kotlin中如何表达?
添加 value =
并从子注释声明中删除 @
:
@PropertySources(value = [
PropertySource("a", "b"),
PropertySource("d", "e"),
])
class Foo
另请注意,@PropertySource
是 @Repeatable
,因此您可以:
@PropertySource("a", "b")
@PropertySource("d", "e")
class Foo
当注解具有基本类型(如 String 或 Int)的数组参数时,使用方法很简单:
public @interface MyAnnotation{
String[] props();
}
@MyAnnotation(props = ["A", "B", "C"])
class Foo {}
不幸的是,这不适用于本身是注释的值。
一个例子是org.springframework.context.annotation.PropertySources
:
public @interface PropertySources {
PropertySource[] value();
}
public @interface PropertySource {
String[] value();
}
在Java中语法用法是
@PropertySources({
@PropertySource({"A", "B", "C"}),
@PropertySource({"D", "E", "F"}),
})
class Foo{}
但在 Kotlin 中,类似方法的代码无法编译
@PropertySources([
@PropertySource(["A", "B", "C"]),
@PropertySource(["D", "E", "F"]),
])
class Foo{}
这种注解数组嵌套构造在Kotlin中如何表达?
添加 value =
并从子注释声明中删除 @
:
@PropertySources(value = [
PropertySource("a", "b"),
PropertySource("d", "e"),
])
class Foo
另请注意,@PropertySource
是 @Repeatable
,因此您可以:
@PropertySource("a", "b")
@PropertySource("d", "e")
class Foo