Search code examples
androidkotlindagger

Why I receive Interface ... does not have constructors (I have Kotlin and java classes)?


Here is my Kotlin code and when I build I receive Interface ImageSizeProvider does not have constructors

interface ImageSizeProvider {
    val spec: ImageSizeSpec
}

@FragmentScope
class ImageSizeProviderImpl @Inject constructor(
    private val mResources: Resources
) : ImageSizeProvider {
     override val spec: ImageSizeSpec
        get() = ...
}
and here is my java dagger interface ( I don't want to migrate this to Kotlin yet)




    @Module
public interface XXXModule {
    @Binds
    @FragmentScope
    ImageSizeProvider bindImageSizeProvider(ImageSizeProviderImpl imageSizeProvider);


Solution

  • According to the language documentation, a property declared in an Interface is abstract. Your declaration:

    val spec ImageSizeSpec
    

    is therefore abstract and you must provide an overridden declaration in any class that implements the Interface. Your ImageSizeProviderImpl doesn't contain an overridden declaration of spec.

    If you create an instance of ImageSizeProvider, this will fail because the variable spec is not initialized.