ojmb
ojmb

Reputation: 11

Calling object methods polymorphically

class A 

class B extends A

object B {
  def createSidekick = new B
}

class C extends A

object C {
  def createSidekick = new C
}

object foo {
  def bar[T <: C] = {
    // T.createSidekick
  }
}

In foo.bar, I would like to call methods from the given object. However, Scala does not allow to extend objects, so there is no obvious way of accomplishing this. What is the best way to accomplish this sort of behaviour?

Upvotes: 0

Views: 63

Answers (1)

Rado Buransky
Rado Buransky

Reputation: 3294

Something like this?

class A

class B extends A

trait Sidekicker[T <: A] {
  def createSidekick: T
}

object B extends Sidekicker[B] {
  def createSidekick = new B
}

class C extends A

object C extends Sidekicker[C] {
  def createSidekick = new C
}

object foo {
  def bar(s: Sidekicker[_]) = s.createSidekick

  val b = bar(B)
  val c = bar(C)
}

Upvotes: 1

Related Questions