为啥我收到 Interface ... 没有构造函数(我有 Kotlin 和 java 类)?

Posted

技术标签:

【中文标题】为啥我收到 Interface ... 没有构造函数(我有 Kotlin 和 java 类)?【英文标题】:Why I receive Interface ... does not have constructors (I have Kotlin and java classes)?为什么我收到 Interface ... 没有构造函数(我有 Kotlin 和 java 类)? 【发布时间】:2021-02-13 05:41:04 【问题描述】:

这是我的 Kotlin 代码,当我构建时收到接口 ImageSizeProvider 没有构造函数

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);

【问题讨论】:

我不确定你在问什么。接口永远不会有构造函数,因为它们不是类。 我知道,但我收到了构建错误 您能粘贴您在某些上下文中得到的确切错误消息吗? (发生的地方等)。您在此处发布的代码看起来不错,因此问题可能出在其他地方。 我收到接口 ImageSizeProvider 没有构造函数,它显示 dagger 模块中不存在的行号,它显示在 dagger 模块中,该模块包含另一个实际提供的模块。 @I.S 你能粘贴带有上下文的错误消息吗? 【参考方案1】:

根据language documentation,Interface 中声明的属性是抽象的。您的声明:

val spec ImageSizeSpec

因此是抽象的,您必须在任何实现Interface 的类中提供覆盖声明。您的 ImageSizeProviderImpl 不包含 spec 的覆盖声明。

如果创建ImageSizeProvider 的实例,这将失败,因为变量spec 未初始化。

【讨论】:

我在实现中有 `override val spec: ImageSizeSpec`。我只是没有复制那个代码 您必须在覆盖中设置一个值。 Interface 中不允许有可修改的数据,只能是常量。 接口的java中的原始代码看起来像ImageSizeSpec getSpec();所以它应该是吸气剂 明白。我试图遵循所有这些。您是否尝试在任何地方实例化ImageSizeSpec?看来这可能是问题的根源。见***.com/questions/43737785/… 没有。问题,已修复,我还没有看到它已初始化,我以为我只是提供,您帮我仔细检查并查看我的位置:)

以上是关于为啥我收到 Interface ... 没有构造函数(我有 Kotlin 和 java 类)?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我收到“不包含采用 0 个参数的构造函数”错误? C#

为啥我的自定义类没有出现在 Interface Builder 的下拉列表中?

为啥 TS 没有从 Interface 获得 React 状态断言?

收到“未定义无参数构造函数”错误,不知道为啥

为啥 Interface Builder 不会改变我的 ViewController 类型?

Interface Builder 将控制出口设置为零——为啥?