generics - 如何确保泛型中的类型实现 Dart 中的某些运算符?

标签 generics dart

我想构建一个包含 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/

相关文章:

dart - 在 Dart for-in 循环中使用 "final"或 "var"?

flutter - 如何使用条件来在Flutter中定义图标颜色?

C# Linq-SQL : An UpdateByID method for the Repository Pattern

java - 在实现接口(interface)的 Java 泛型上强制使用完全相同的类型

Java 泛型、接口(interface)和类继承

firebase - 使用Firestore快照中的StreamController的StreamBuilder

c# - 直接拆箱一个装箱的 int 到 short

java - 继承不适用于作为泛型类型传递

dart - 模板重复不适用于嵌套列表(Polymer.dart)

dart - Flutter dropdownbutton添加装饰报错