vala - 从方法返回接口
问题描述
在 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
。
解决方案
这叫做铸造。像这样的东西应该工作:
class MemoryReader: Reader {
GLib.MemoryInputStream _stream;
SeekableInput read() { return (SeekableInput)_stream; }
}
推荐阅读
- c# - 尝试将值存储在不从 MonoBehaviour 继承的脚本中
- c++ - 跨操作系统的编译器行为不一致(使用 ubuntu docker 容器的 Mac OS/Windows)(“无符号”的多个定义)
- angular - Nativescript Angular 错误 NG8001:“StackLayout”不是已知元素:
- javascript - os x getUserMedia 增益控制随着时间的推移减少恒定的输入信号
- regex - 如何让 Jest findRelatedTests 引用文件夹中的所有文件并忽略特定文件?
- javascript - 如何清除“意外副作用”
- c++ - c++中结构的类型安全转换
- android - 在项目或库中找不到清单中引用的类 io.flutter.app.FlutterApplication
- c++ - 为什么 map 的键不能通过迭代器插入到向量中?
- java - 线程“main”java.io.FileNotFoundException中的异常:(系统找不到指定的文件)询问文件路径时