首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin:类型'exoPlayer‘不匹配重写的var -属性’公共抽象var exoPlayer: ExoPlayer?

Kotlin:类型'exoPlayer‘不匹配重写的var -属性’公共抽象var exoPlayer: ExoPlayer?
EN

Stack Overflow用户
提问于 2017-06-24 20:00:51
回答 2查看 354关注 0票数 4

我不太明白这是怎么回事。有人能解释一下吗?

我得到以下错误:Type of 'exoPlayer' doesn't match the type of the overridden var-property 'public abstract var exoPlayer: ExoPlayer? defined in...

当我编译时:

代码语言:javascript
复制
class LocalPlayback(context: Context, override var exoPlayer: SimpleExoPlayer?) : Playback {
    private val context: Context
    //... other stuff...
    }

其中,LocalPlayback扩展了回放:

代码语言:javascript
复制
interface Playback {
    var exoPlayer: ExoPlayer?
    //... other stuff...
    }

SimpleExoPlayer实现了ExoPlayer接口。

EN

回答 2

Stack Overflow用户

发布于 2018-10-13 05:00:14

变量既允许获取值,也允许设置值。以类型安全的方式重写变量是不可能的,因为使用超级类型,他们可以将值设置为更一般的类型,然后当有人使用重写的var时,它将是错误的类型。通过将超级类型更改为val,可以防止将其设置为一般类型,从而消除了问题。

票数 2
EN

Stack Overflow用户

发布于 2017-06-24 22:07:25

您需要在接口中将您的exoPlayer变量声明为val,一切都会好起来的。

代码语言:javascript
复制
interface Playback {
    val exoPlayer: ExoPlayer?
    //... other stuff...
    }

我举了一个例子来测试:

代码语言:javascript
复制
    interface Playback {
        val exoPlayer: ExoPlayer
    }

    class LocalPlayback(override var exoPlayer: SimpleExoPlayer) : Playback 

    open class ExoPlayer
    class SimpleExoPlayer : ExoPlayer()

它编译得很好。也许其他人能帮我们解释一下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44740473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档