0

我有一个特征,它代表了一些公开一些公共方法的模块(想想一个服务):

trait X { 
  def exposeMe: AService = ...
  def keepMeHidden: BService = ...
}

然后,我有一个Y模块需要来自X. 的客户Y也需要来自 的一项服务X。但我不希望他们依赖 whole X,只依赖这一项服务。我想“导出”一项公开的服务。

trait Y { this: X => 
  def exposeMe2: AService = exposeMe
}

这可行,但是有没有办法保持方法名称相同?

4

1 回答 1

2

简短的回答

trait X { 
  def exposeMe: Int = 12
  def keepMeHidden: Int = 41
}

trait XComponent {
  def x: X
}

trait Y { this: XComponent => 
  def exposeMe: Int = x.exposeMe
}

问题版后更新。

问题是您烤了一半蛋糕,然后想从这个复杂的组件中提取一层。正确的方法是要求你真正需要的东西:

trait Y { this: AServiceComp => 
  def exposeMe: AService = aService.exposeMe
}

AServiceComp可以通过单个实现AService或使用来实现实现new XImpl.exposeMe(恕我直言,最后一个很奇怪)。

于 2017-05-08T08:18:11.327 回答