作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试制作以下代码,但 T 只能是 int、double 或自定义类。我找不到如何限制 中的类型 Dart 或类似 的东西在哪里 来自 C# .我怎样才能在 Dart 中做到这一点?
class Array3dG<T> extends ListBase<T> {
List<T> l = List<T>();
Array3dG(List<T> list) {
l = list;
}
set length(int newLength) { l.length = newLength; }
int get length => l.length;
T operator [](int index) => l[index];
void operator []=(int index, T value) { l[index] = value; }
}
最佳答案
无法在编译时约束类型变量。类型变量只能有一个界限,并且唯一的界限同时满足 int
你的自定义类是Object
.
正如@Mattia 所建议的,如果类型参数不是您支持的参数之一,您可以在运行时检查并抛出构造函数:
Array3dG(this.list) {
if (this is! Array3dG<int> &&
this is! Array3dG<double> &&
this is! Array3dG<MyClass>) {
throw ArgumentError('Unsupported element type $T');
}
}
class Array3dG<T> {
List<T> list;
Array3dG._(this.list);
static Array3dG<int> fromInt(List<int> list) => Array3dG<int>._(list);
static Array3dG<int> fromDouble(List<double> list) => Array3dG<double>._(list);
static Array3dG<MyClass> fromMyClass(List<MyClass> list) => Array3dG<MyClass>._(list);
...
}
Array3dG.fromInt(listOfInt)
.它看起来像一个命名构造函数,但它只是一个静态工厂方法(所以前面没有使用
new
)。
关于dart - 将泛型类型参数限制为 int、double 或自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57056244/
我是一名优秀的程序员,十分优秀!