当然,有一种更简洁的方式来打开类型选项而不是:
// Return an object of the given class type:
def badFactory( clazz: Option[Class[_]]): AnyRef = {
clazz match {
case Some(foo) if foo == classOf[Foo] => new Foo()
case Some(bar) if bar == classOf[Bar] => new Bar()
}
}
注意:如果clazz是1)没有或者2)有些但是Foo和Bar都没有,我希望它会抛出。
答案 0 :(得分:3)
不是真的。如果你事先将它们放入val
s(名称必须以大写字母开头),你可以拥有
val FooClass = classOf[Foo]
val BarClass = classOf[Bar]
// Return an object of the given class type:
def badFactory( clazz: Option[Class[_]]): AnyRef = {
clazz match {
case Some(FooClass) => new Foo()
case Some(BarClass) => new Bar()
case _ => ...
}
}
或者避免重复Some
:
// Return an object of the given class type:
def badFactory( clazz: Option[Class[_]]): AnyRef = {
clazz match {
case Some(clazz2) =>
if (clazz2 == classOf[Foo])
new Foo()
else if (clazz2 == classOf[Bar])
new Bar()
else ...
case None => ...
}
}