假设我们有一个方法
def foo[T](param: T): Array[String] = {
//preform smth
}
我们如何确保T型为2种或多种可能的变体。例如,在我的特定情况下,我希望T为String
或我的自定义类型Bar
答案 0 :(得分:4)
请参阅"does Scala have type disjunction (union types)",特别是my answer。这种技术允许你写
def size[T : (Int |∨| String)#λ](t : T) = t match {
case i : Int => i
case s : String => s.length
}
答案 1 :(得分:0)
使用sealed trait
并使两个/所有类型都继承自sealed trait
。当然,这仅适用于您控制的类型,因此它不适用于String
。此外,必须在与密封特征相同的文件中定义所有类型。
以下是一个例子:
sealed trait Tr
class Bar extends Tr
class Baz extends Tr
object Test {
def foo(t: Tr): Array[String] = t match {
case bar: Bar => Array("It's a bar")
case baz: Baz => Array("It's a baz")
}
}