user2737635
user2737635

Reputation:

Extract parameterised type from self in scala

I have class with parameterised type

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)
}

I want to create trait that can be mixed to Worker.

trait Extension {
  self: Worker[_] =>      

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

How to extract type information from self to replace ???

Upvotes: 0

Views: 37

Answers (1)

Jasper-M
Jasper-M

Reputation: 15086

Here is a way to extract a type parameter:

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

But I wouldn't recommend that :) You could define a type member in Worker that can be used in Extension.

abstract class Worker[T] {
  type TT = T
}

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

Or you could just consider giving Extension a type parameter. It's not such a big deal, I think.

Upvotes: 1

Related Questions