According to the documentation: https://kotlinlang.org/docs/reference/annotations.html
You can apply multiple annotations to a single site-use target, but is there a way to apply the same annotation to multiple site-use targets?
My use-case is decorating classes with annotations for SimpleXML. To use an immutable data class
, you have to annotate both the field and the constructor parameter:
data class Data(
@field:Element(name = "ID")
@param:Element(name = "ID")
val id: Int,
@param:Element(name = "TEXT")
@field:Element(name = "TEXT")
val text: String)
For data classes with many fields, you can easily end up with 3x as many annotations as actual code, and it would be nice to eliminate the duplication. This is especially annoying when you have to use a complicated annotation like ElementUnion
which can be multiple lines on its own.
It is also possible to use multiple annotations on the same declaration: @Author(name = "Jane Doe") @EBook class MyClass { ... } If the annotations have the same type, then this is called a repeating annotation: @Author(name = "Jane Doe") @Author(name = "John Smith") class MyClass { ... }
By prefixing the annotation with @get: the resulting bytecode will have the annotation on the generated getter function: // Decompiled from the resulting Kotlin Bytecode @SomeAnnotation @Nullable public final String getSomeProperty() { return this. someProperty; }
The @JvmName annotation changes the name of a function in the bytecode.
Annotations, just like methods or fields, can be inherited between class hierarchies. If an annotation declaration is marked with @Inherited , then a class that extends another class with this annotation can inherit it. The annotation can be overridden in case the child class has the annotation.
Unfortunately, as of Kotlin 1.3, there's no syntax for this use case
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With