密封特征可以包含元组吗?

Can sealed trait contain Tuples?

此密封特征编译:

sealed trait Tree[Int , String]

但是如果我使用元组:

sealed trait Tree[(Int , String)]

导致编译器错误:

identifier expected but '(' found.

元组是密封特征的特例吗?

申报时

sealed trait Tree[Int, String]

其实跟IntString类型没有关系。您正在声明名为 IntString 的类型参数(即它们 "shadow" IntString)。例如,这是一个有效的扩展名:

case object Pine extends Tree[Boolean, BigDecimal]

编译器报错是因为您使用了无效的语法来声明类型参数(括号)。您似乎在尝试声明固定类型参数,这毫无意义。

如果使用 def(或 class 或任何特征)进行尝试,您会得到相同的编译错误:

def foo[(Int, String)](a: (Int, String)): Unit

您的原始声明(

trait Tree[Int, String]

) 并不意味着特征 Tree 在 Scala 中采用 IntString 的参数。

如果你想声明一个 class 需要 IntString:

class Foo(i: Int, s: String)

如果你需要 class 是不能带参数的特征:

trait Foo {
  val i: Int
  val s: String
}