I'm experimenting with Kotlin and I have a following Java-annotation
@Target( { TYPE })
@Retention(RUNTIME)
public @interface View {
String[] url() default "";
Class<? extends Component> parent() default Component.class;
}
and in Java-code it is used in following way
@View(url="/", parent=RootView.class)
public class FrontView extends Component {
}
How is that expressed in Kotlin? I have tried
[View(url=Array<String>("/"), parent=Class<RootView>)]
class FrontView : Component() {
}
but it does not compile. I only get type mismatch errors.
Type mismatch.
Required: jet.Array<jet.String?>?
Found: jet.Array<T>
and
Type mismatch
Required: java.lang.Class<out net.contextfw.web.application.component.Component?>?
Found: java.lang.Class<T>
annotation. Repeatable meta-annotation. This will make it repeatable both in Kotlin and Java. Java repeatable annotations are also supported from the Kotlin side.
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; }
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.
I found the solution. The syntax seems to be like this:
[View(url=array("/"), parent=javaClass<RootView>())]
class FrontView() : Component() {
}
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