我想构建一个包含 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 似乎不支持这一点。
最佳答案
我认为您能做的最好的事情就是假设元素具有这些方法并使类型参数不受限制。这将消除警告,尽管当您希望类型系统帮助您时,这可能有点令人不满意。
联合类型会有所帮助,所以这是您可以加注星标的错误:http://dartbug.com/4938
关于generics - 如何确保泛型中的类型实现 Dart 中的某些运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18550825/