blob: e1d5df44e3ff6343d40d13df1c9987167ca32242 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
// Representing the current type
trait Pet {
type This <: Pet
def name: String
def renamed(newName: String): This
}
case class Fish(name: String, age: Int) extends Pet {
type This = Fish
def renamed(newName: String): Fish = copy(name = newName)
}
case class Kitty(name: String, age: Int) extends Pet {
type This = Kitty
def renamed(newName: String): Kitty = copy(name = newName)
}
object Test {
def esquire[A <: Pet](a: A): a.This = a.renamed(a.name + ", Esq.")
val f: Fish = esquire(new Fish("bob", 22))
}
|