Dart 省道列表-子类型上的过滤器
在我的dart项目中,构造经常出现在许多上下文中。对于具有类型且具有子类型的列表,此代码将子类型过滤到新列表:Dart 省道列表-子类型上的过滤器,dart,Dart,在我的dart项目中,构造经常出现在许多上下文中。对于具有类型且具有子类型的列表,此代码将子类型过滤到新列表: class A { } class AChild extends A { } List<A> alist = [new A(), new AChild()]; List<AChild> aclist = alist.where((final A a) => a is AChild). map(
class A {
}
class AChild extends A {
}
List<A> alist = [new A(), new AChild()];
List<AChild> aclist = alist.where((final A a) => a is AChild).
map((final A a) => a as AChild).toList();
A类{
}
类AChild扩展了{
}
列表列表=[new A(),new AChild()];
列表aclist=alist.where((最终A)=>A是AChild)。
map((最后一个A)=>A作为AChild.toList();
没什么大不了的,一切正常。所以我只是想找一些波兰人。可以用一个函数或更紧凑的东西来代替它吗?已经尝试用列表和泛型类型编写函数,但不要得到<>代码> 接受此。 < P>不确定是否会考虑此短。如果您经常使用此模式,可能是:
class CheckType<T> {
bool isT(dynamic v) => v is T;
T as(dynamic v) => v as T;
}
main() {
final ct = new CheckType<AChild>();
List<A> alist = [new A(), new AChild()];
List<AChild> aclist = new List<AChild>.from(alist.where(ct.isT).(ct.as));
}
类检查类型{
bool-isT(动态v)=>v是T;
T as(动态v)=>v as T;
}
main(){
final ct=new CheckType基于Günter的提示,使用工具类代替函数。如果经常出现,则过滤器类可以作为常量放在项目中,这很好。获得以下信息:
class A {}
class AChild extends A {}
class TypeFilter<T, Z>{
const TypeFilter();
List<T> list(List<Z> lz){
return lz.where((final Z z) => z is T)
.map((final Z z) => z as T).toList();
}
}
main(List<String> args) {
const TypeFilter filterAChild = const TypeFilter<AChild, A>();
List<A> alist = [new A(), new AChild()];
List<AChild> aclist = filterAChild.list(alist);
print(aclist);
}
class A{}
类AChild扩展了{}
类类型过滤器{
常量TypeFilter();
列表(列表lz){
返回lz,其中((最终Z)=>Z是T)
.map((最终Z)=>Z作为T.toList();
}
}
主(列表参数){
const-TypeFilter-filterAChild=const-TypeFilter();
列表列表=[new A(),new AChild()];
List aclist=filterAChild.List(列表);
打印(aclist);
}
使用CheckType
很酷,也许我会使用这种风格,谢谢。尝试用函数包装,但它保持了原始列表的类型。函数的泛型类型参数在运行时还不可用。恐怕这将在以后计划。