【发布时间】:2026-01-03 20:20:02
【问题描述】:
我正在尝试创建一个类的实例并根据某些条件混合某些特征。所以给定:
class Foo
trait A
trait B
我可以做类似的事情
if (fooType == "A")
new Foo with A
else if (footType == "B")
new Foo With B
对于像这样的简单情况,这很好用。我的问题是可以根据其他条件将多个特征混合到同一个实例中,并且最重要的是,被实例化的类有相当多的参数,所以这会导致一个非常丑陋的条件块。
我想做的是事先确定要混合的特征,例如(我知道这不是合法的 scala 代码):
val t1 = fooType match {
case "a" => A
case "b" => B
}
val t2 = fooScope match {
case "x" => X
case "y" => Y
}
new Foo with t1 with t2
其中 A、B、X 和 Y 都是先前定义的特征,而 fooType 和 fooScope 是我的函数的输入。我不确定是否有任何我可以做的与上述有点相似的事情,但任何建议都将不胜感激。
谢谢
【问题讨论】:
-
你想要的很可能不是必需的。如果不同 Foo 的行为应该不同,您可以轻松地将条件语句添加到它们的方法实现中。无需更改继承层次结构。