没有显式目标的值形参注解在 Kotlin 2.1.20 前只应用于形参本身。
对于适用于形参和字段或属性的注解,当注解用于 val 或 var 构造函数形参时,这种行为可能是非预期行为。
示例:
class Example(
@Param val foo: String,
@ParamField val bar: String, // 字段未被注解,只有形参被注解
@ParamProperty val baz: String, // 属性未被注解,只有形参被注解
@ParamProperty boo: String,
)
@Target(AnnotationTarget.VALUE_PARAMETER)
annotation class Param
@Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FIELD)
annotation class ParamField
@Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY)
annotation class ParamProperty
在应用快速修复后:
class Example(
@Param val foo: String,
@field:ParamField val bar: String,
@property:ParamProperty val baz: String,
@ParamProperty boo: String,
)
@Target(AnnotationTarget.VALUE_PARAMETER)
annotation class Param
@Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FIELD)
annotation class ParamField
@Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY)
annotation class ParamProperty