在特征中动态混合以产生有限大小的装饰组合物

时间:2014-12-04 08:14:32

标签: scala dynamic decorator mixins traits

我有一组有限的特征,比如说Trait1TraitN,我想建立一个"复合材料" o的装饰器混合在装饰的子集中(对于混合的每个特征)在运行时。 N = 2的例子:

class CommonImpl extends Trait1 ... with TraitN { ... }
trait Trait1Decoration extends Trait1 { ... }  // override some methods
trait Trait2Decoration extends Trait2 { ... }  // override some methods
val oDecorated = o match {
  case t12: Trait1 with Trait2 => new CommonImpl with Trait1Decoration with Trait2Decoration
  case t1: Trait1 => new CommonImpl with Trait1Decoration
  case t2: Trait2 => new CommonImpl with Trait2Decoration
  case _ => new CommonImpl  // no decorations, could also return "o"
} // now, oDecorated has some subset of Traits decorated
  1. 如何实现优雅,没有2 ^ N个案例并输入混合特征的每个子集?
  2. 如何有效 (最大限度地减少反射的使用,避免深度继承)。
  3. 如果我们知道没有两个特征存在冲突的方法/字段,是否可以做得更好?

0 个答案:

没有答案