【发布时间】:2018-04-12 19:07:21
【问题描述】:
出于必要,我的代码相当复杂。我试图简化我正在处理的对象系统的整体布局,以便(希望)使其更易于理解。
abstract class BaseType {}
abstract class MixinTypeA implements BaseType {}
abstract class MixinTypeB<T extends MixinTypeA> implements BaseType {
Future<T> mixinMethod({bool argA = true,
bool argB = true,
bool argC = true}) =>
someMethodCall()
}
abstract class BaseTypeA extends BaseType implements MixinTypeA {
// declares a constructor
BaseTypeA();
}
abstract class BaseTypeB extends BaseType implements MixinTypeB {
// declares a constructor
BaseTypeB();
}
abstract class TypeA extends BaseTypeA {}
class TypeB extends BaseTypeB with MixinTypeB<TypeA> {}
在这种情况下,TypeB 会产生错误。这是因为它试图混入MixinTypeB<TypeA>。因为 TypeB 已经扩展了BaseTypeB,它使用推断的<MixinTypeA> 泛型实现了MixinTypeB,所以MixinTypeB 接口使用两个不同的(尽管通过继承相关)接口实现了两次:TypeA 和MixinTypeA。
本质上,T 泛型的存在是为了让我的代码保持干燥。 MixinTypeB 中的方法示例是该类可能具有的具有特定类型签名T 的各种潜在方法之一。我不知道如何在不损害这种类型系统的继承结构的情况下绕过新的限制。
【问题讨论】:
标签: oop dart method-signature