首页 > 解决方案 > 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!
  }
}

标签: genericsdart

解决方案


推荐阅读