generics - Dart:如何将泛型方法绑定到嵌套的泛型参数?
问题描述
有没有办法创建一个绑定到泛型参数的泛型方法?下面是我的示例:
class Taste {}
class Vanilla extends Taste {}
class Chocolate extends Taste {}
class IceCream<T extends Taste> {
int tasteLevel = 0;
//only this taste can be used
void enhanceTaste(T taste) {
tasteLevel++;
}
}
class ChocolateIceCream extends IceCream<Chocolate> {}
class VanillaIceCream extends IceCream<Vanilla> {}
这是实现泛型方法enhanceTastes()的类。是否可以将方法参数味道绑定到_iceCreamList味道?也许是一种定义“T=I<E>”的方法,因此“E”的类型以某种方式由“T”派生。
class IceCreamBox<T extends IceCream> {
List<T> _iceCreamList = List<T>();
//GENERIC METHOD
void enhanceTastes<E extends Taste /*of _iceCreamList*/>(E taste) {
for (T iceCream in _iceCreamList) {
iceCream.enhanceTaste(taste);
}
}
}
这是测试。不应允许 box.enhanceTastes(Vanilla())。
class TestBox {
void test() {
IceCreamBox<ChocolateIceCream> box = IceCreamBox<ChocolateIceCream>();
box.enhanceTastes(Chocolate()); //OK
box.enhanceTastes(Vanilla()); //I WANT THE COMPILER TO COMPLAIN! BECAUSE THIS IS A CHOCOLATE ICE CREAM BOX!
}
}
解决方案
推荐阅读
- javascript - 是的条件验证
- css - 如何在物化中将响应式图像添加到表格单元格?
- onedrive - Microsoft OneDrive Google 搜索同步内容
- python - Plotly:为颜色条添加了标题,但无法在绘图中看到
- flutter - 设备后退按钮未转到内存堆栈中的上一个屏幕,并且 WillPopScope 小部件不起作用
- spring-boot - Kubernetes Ingress gce 暴露了两个基本的 Sping Boot 服务
- cefsharp - 使用 Cefsharp - 无法访问网页上的对象
- python - 如何检查我的脚本在不同的 python 版本上是否正常工作
- c++ - FFTW (FFTW3) 是否适用于 MPI 拓扑?
- angular - 父可观察方法的角度多个Http调用分组错误