在测试我最近创建的一些代码时,我发现有些段落没有显式类型注释就无法编译。我试图在以下代码片段中最小化问题:
case class Base[E,S](al:Set[E],sts:Set[MidState[S]],ss:MidState[S],
d:Map[(MidState[S],E),MidState[S]],aS:Set[MidState[S]])
case class Edge[E,S](state_1: MidState[S],l:E ,state_2: MidState[S])
sealed trait MidState[S] extends BaseState[S]
sealed case class State[S](l:S)
extends MidState[S]
case object FailureState extends MidState[Nothing]
Base 有一个伴随对象,其应用方法定义如下:
object Base {
def apply [E,S](edges:Set[Edge[E,S]],ss:MidState[S],
aS:Set[MidState[S]],partialMode:Boolean): Base[E,S]
当我尝试使用此应用方法实例化 Base 时,我无法绕过 aS 的显式类型注释:
val aS : Set[MidState[String]] = (State("C") :: Nil).toSet
val base = Base(edges,State("A"),aS,partialMode = true)
如果我删除了 aS 的显式类型注释,则 aS的类型是Set[State[S]]而不是Set[MidState[S]],它需要用于 apply 方法。尽管将(State("C") :: Nil).toSet直接插入到 apply 方法中,是否有更好的解决方案来避免这种显式类型注释?