10
votes

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>
1
Beginner here. I had the error: "Parameters must have type annotation" for the code val isHidden:? Boolean. The correct code should be val isHidden: Boolean? (to define a Optional val). - JonyD

1 Answers

8
votes

I found the solution. The syntax seems to be like this:

[View(url=array("/"), parent=javaClass<RootView>())]
class FrontView() : Component() {
}