scala/ScalaBook/chapter-03/type2.scala
class ClassA {
private var nameA = "Class A"
def getName = nameA
def setName(y: String) = nameA=y
}
class ClassB {
private var nameB = "Class B"
def getName = nameB
def setName(y: String) = nameB=y
}
val items = List[{ def getName: String }](new ClassA, new ClassB)
// despite Foo and Bar being completely types, the compiler "knows"
// that they will both implement our anonymous type declaration
items.map(_.getName).foreach(println)
type HasName = { def getName: String }
def printName(o: HasName) = println(o.getName)
val items2 = List[HasName](new ClassA, new ClassB)
items2.foreach(printName)
//Thomas Lee http://www.deskchecked.com/2007/11/12/anonymous-type-acrobatics-with-scala/