我有以下设计问题:
/**
* Those 2 traits are the public API
*/
trait Box {
def include(t: Token): Box
}
trait Token
/**
* Implementation classes
*/
case class BoxImpl(id: Int) extends Box {
/**
* the implementation of this method depends on the implementation
* of the Token trait
* TODO: REMOVE asInstanceOf
*/
def include(t: Token) = BoxImpl(t.asInstanceOf[TokenImpl].id + id)
}
case class TokenImpl(id: Int) extends Token
// use case
val b: Box = new BoxImpl(3)
val o: Token = new TokenImpl(4)
// == BoxImpl(7)
b.include(o)
在上面的代码中,我不想id
在公共 API 中公开(甚至没有将其设置为,private[myproject]
因为这仍然会在我的项目中包含循环依赖项)。
什么方法可以让公共 API 保持完整,同时让实现类彼此之间有一定的可见性(没有丑陋的演员表)?