Kotlin:' exoPlayer'与被覆盖的var-property' public abstract var exoPlayer:ExoPlayer的类型不匹配?定义于

时间:2017-06-24 20:00:51

标签: kotlin

我不确定我明白这里发生了什么。 请有人解释一下吗?

我收到以下错误:  class LocalPlayback(context: Context, override var exoPlayer: SimpleExoPlayer?) : Playback { private val context: Context //... other stuff... }

编译时:

interface Playback {
    var exoPlayer: ExoPlayer?
    //... other stuff...
    }

LocalPlayback扩展播放:

SimpleExoPlayer

ExoPlayer实现了<A, B> Pair<Stream<A>, Stream<B>> flattenFunctional(Iterator<Pair<Stream<A>, Stream<B>>> iterator) { return Streams.stream(iterator) .reduce(Pair.of(Stream.empty(), Stream.empty()), (a, b) -> Pair.of( Stream.concat(a.first, b.first), Stream.concat(a.second, b.second))); } 接口。

2 个答案:

答案 0 :(得分:1)

变量允许获取和设置值。用类型安全的方式覆盖具有特定类型的var的var是不可能的,因为使用超级类型,他们可以将值设置为更通用的类型,然后当有人使用覆盖的var时,它将是类型错误。通过将超级类型更改为具有val,可以防止将其设置为常规类型,从而消除了此问题。

答案 1 :(得分:0)

你需要在界面中将你的exoPlayer变量声明为val,一切都会好的。

interface Playback {
    val exoPlayer: ExoPlayer?
    //... other stuff...
    }

我做了一个测试的例子:

    interface Playback {
        val exoPlayer: ExoPlayer
    }

    class LocalPlayback(override var exoPlayer: SimpleExoPlayer) : Playback 

    open class ExoPlayer
    class SimpleExoPlayer : ExoPlayer()

它汇编得很好。也许别人可以帮我们解释一下。