【发布时间】:2013-08-31 17:21:13
【问题描述】:
我想构建一个包含T 类型对象的泛型类。包含类必须对这些对象执行一些运算符,特别是像+、-、* 和/ 这样的运算符。如何确保对象的类型实现了这些运算符?
具体来说,我正在实现一个矩阵类,就像在数学矩阵中一样。我本来可以只允许 double 元素,但我还希望能够制作自定义数字类的矩阵,例如有理数或复数(这是更大项目的一部分)。
我当前的实现有签名
class Matrix<T extends MatrixElement> {
final int _rows; // The number of rows
final int _cols; // The number of columns
...
final List<T> _elements; // Matrix data, [i*step+j] is row i, col j.
MatrixElement 是一个抽象类,带有类似的运算符
dynamic operator + (dynamic other);
我本可以将 Matrix 类更改为简单的 class Matrix<T> { ... },但随后可能会在运行时出现错误,并且 Dart 编辑器中充满了关于未为类 Object 定义运算符的警告。
我的直觉说是class Matrix<T implements MatrixElement> { ... },但Dart 似乎不支持这一点。
【问题讨论】: