Reputation: 11
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
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