首页 > 解决方案 > 从方法返回接口

问题描述

在 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

解决方案


这叫做铸造。像这样的东西应该工作:

class MemoryReader: Reader {
  GLib.MemoryInputStream _stream;

  SeekableInput read() { return (SeekableInput)_stream; }
}

推荐阅读