【发布时间】:2020-07-24 22:31:11
【问题描述】:
在 Vala 编程语言中,有没有办法声明一个接口方法,该方法返回一个实现接口的对象?例如,如果我需要一个从某个地方读取某些内容的方法,我可以这样声明它:
interface SeekableInput: GLib.InputStream, GLib.Seekable {}
interface Reader {
SeekableInput read();
}
现在我想实现一个Reader,它只是从内存中读取到MemoryInputStream,根据其文档,它实际上是一个实现Seekable的InputStream。
class MemoryReader: Reader {
GLib.MemoryInputStream _stream;
// This produces "... overriding method ... is incompatible ... expected return type ...":
GLib.MemoryInputStream read() { return _stream; }
// This produces "Cannot convert from ...":
SeekableInput read() { return _stream; }
}
我不能声明read() 来返回MemoryInputStream,因为会有另一个Reader 读入BufferedInputStream。
【问题讨论】:
标签: vala