Create Custom Dagger 2 Scope with Kotlin

2020-08-23 08:21发布

问题:

I'm trying to convert a Java code into Kotlin for custom dagger scope creation.

Here is Java code:

@Documented
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomScope {
}

Once converted into kotlin here is the result

@Scope
@Documented
@Retention(RetentionPolicy.RUNTIME) annotation class CustomScope 

I have a type mismatch with @Retention(RetentionPolicy.RUNTIME).I have the following error message :Required Type is AnnotationRetention but RetentionPolicy type was found.

Also @interface seems to have been replaced.

回答1:

The Retention annotation class which you might have used is from the Kotlin's library (from the package kotlin.annotation).

It expects a property of the enum type AnnotationRetention. So, you can do something like this:

@MustBeDocumented
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class CustomScope

Btw, if you look at the Annotations.kt file, you will see that that the Retention annotation will take the default property AnnotationRetention.RUNTIME when you don't pass anything to it.

So, just @Retention annotation will do too.