【问题标题】:In Kotlin, can an interface be derived from a custom class?在 Kotlin 中,可以从自定义类派生接口吗?
【发布时间】:2021-03-05 00:59:46
【问题描述】:

我刚开始学习 Kotlin,在浏览文档时遇到了以下 sn-p:

internal class LifecycleObserver : MyLocationListener(
    private val context: Context,
    private val lifecycle: Lifecycle,
    private val callback: (Location) -> Unit)

这来自https://developer.android.com/topic/libraries/architecture/lifecycle#kotlin,大约在页面的一半(以防我遗漏了一些对理解此示例的上下文至关重要的内容)。 LifeCycleObserver 是一个接口,而MyLocationListener 是一个用户定义的类,假设是这种情况,在我看来,教程作者已经从用户定义的类派生了一个接口。这甚至是可能的吗?如果是这样,这种技术/技术集的名称是什么?如果不是......好吧,同样的问题仍然适用。有了正确的术语,我的研究可以比过去几天更有成效。感谢阅读。

【问题讨论】:

  • LifeCycleObserver is an interface看你贴的sn-p,不是接口,是类。类可以从类和接口继承,但接口只能从其他接口继承。
  • 我确实同意你的看法;我的困惑主要来自我链接到的网站,因为LifecycleObserver 是一个接口的名称(androidx.lifecycle.LifecycleObserver),而这个 sn-p 来自的站点每隔一次使用这个名称就谈论这个现有的接口.作者为什么要使用LifecycleObserver?或者更确切地说,我没有看到这个选择的意义?

标签: kotlin interface superclass derived-class


【解决方案1】:

我访问了您提到的link。实际上这是他们的 kotlin 代码中的一个错误。切换到java代码,可以看到类被定义为,

class MyLocationListener implements LifecycleObserver {
    private boolean enabled = false;
    public MyLocationListener(Context context, Lifecycle lifecycle, Callback callback) {
        ...
    }
    ...
}

它对应的kotlin代码是,

internal class MyLocationListener(
    private val context: Context,
    private val lifecycle: Lifecycle,
    private val callback: (Location) -> Unit
) : LifecycleObserver {
    private var enabled = false
    ...
}

但不知何故,一个错误潜入了,LifecycleObserver 出现在 ':' 之前,而 MyLocationListner 出现在 ':' 之后。如果可以,请向他们报告该错误。

如您所知,接口不能从类派生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2012-11-22
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多