blob: f84ee8d5d5f76ee9eb8ac0be6dacd654c84c686e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
package test
trait Vector[+A] {
def append(x: Vector[A]): Vector[A]
private[this] def append3(x: Vector[A]): Vector[A] = append(x)
}
class C[T]
object Covariant {
class Foo[+A] {
private[this] var a : A = _
def getA : A = a
private[this] def setA(a : A) = this.a = a
object Baz extends C[A]
trait Convert[B] {
def b2a(b : B) : A
def doit(b : B) = setA(b2a(b))
}
}
class Foo2[+A] {
private[this] var a : A = _
def getA : A = a
private[this] def setA(a : A) = this.a = a
{
trait Convert[B] {
def b2a(b : B) : A
def doit(b : B) = setA(b2a(b))
}
()
}
}
class Foo3[+A] {
private[this] var a : A = _
def getA : A = a
private[this] def setA(a : A) = this.a = a
private[this] trait Convert[B] {
def b2a(b : B) : A
def doit(b : B) = setA(b2a(b))
}
}
abstract class AbstractTest {
val a : Foo[AnyRef]
val c = new a.Convert[Int] {
def b2a(b : Int) : AnyRef = "hello"
}
val b : Int = 42
}
class Test extends AbstractTest {
val a : Foo[Character] = new Foo[Character]
}
def main(args : Array[String]) : Unit = {
val test = new Test
test.c.doit(test.b)
val x : Character = test.a.getA
Console.println("XXX " + x)
}
}
|