为啥我收到 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 类)?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的自定义类没有出现在 Interface Builder 的下拉列表中?
为啥 TS 没有从 Interface 获得 React 状态断言?