从scala中的self提取参数化类型

从scala中的self提取参数化类型,scala,Scala,我有一个参数化类型的类 abstract class Worker[T] { def conf1: ... def conf2: ... def doWork ... } abstract class SpecializedWorker[T: TypeTag] extends Worker[T] { //some behavior overriden (used fields from Trait that i want create) } 我想创造一种可以与员工混合的特质

我有一个参数化类型的类

abstract class Worker[T] {
  def conf1: ...
  def conf2: ...
  def doWork ...
}

abstract class SpecializedWorker[T: TypeTag] extends Worker[T] {
  //some behavior overriden (used fields from Trait that i want create)
}
我想创造一种可以与员工混合的特质

trait Extension {
  self: Worker[_] =>      

  def someParameter: ... // only several workers can have that. thats why i need trait
  def produceSpecializedWorker = new SpecializedWorker[???]() {}
}    

如何从self中提取类型信息以替换???

以下是提取类型参数的方法:

trait Extension {
  self: Worker[_] =>      
  def mkSpWorker[T](implicit ev: this.type <:< Worker[T]) = new SpecializedWorker[T]() {}
} 

或者您可以考虑将扩展名作为类型参数。我想这没什么大不了的。

你能澄清一下你的问题吗?您的意思是要从self中提取工作人员的类型吗?为什么不执行trait扩展[t]{self:Worker[t]}?因为我需要两次set类型t。这是可能的解决方法,但不清楚类SomeWorker使用扩展名[SomeCaseClass]扩展工人[SomeCaseClass]两次设置类型T是什么意思?类SomeWorker使用扩展名[SomeCaseClass]扩展工人[SomeCaseClass]
abstract class Worker[T] {
  type TT = T
}

trait Extension {
  self: Worker[_] =>      
  def mkSpWorker = new SpecializedWorker[TT]() {}
}