我不确定我明白这里发生了什么。 请有人解释一下吗?
我收到以下错误:
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)));
}
接口。
答案 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()
它汇编得很好。也许别人可以帮我们解释一下。