2011-03-07 32 views
2

可能重复:
How do I setup multiple type bounds in Scala?在Scala中有两个上限?

我对Scala的类型系统有点卡住了。我有类似这样的类型:

// ==== BASE CLASS 
class Attribute { 
    def name(): String 
    def defaultVal(): Any 
} 

// ==== TRAIT - defines data type of an attribute 
trait AttributeDataType[T] { 
    def defaultVal(): T 
} 

trait TextAttr extends AttributeDataType[String] { 
    def defaultVal() = "" 
} 

trait NumAttr extends AttributeDataType[Double] { 
    def defaultVal() = 0.0 
} 

// ==== CONCRETE ATTRIBUTES 
class AgeAttribute extends Attribute with NumAttr { 
    def name() = "Age" 
} 

class ColorAttribute extends Attribute with TextAttr { 
    def name() = "Color" 
} 

而现在这应该工作:

object Main { 

    def main(args:Array[String]) { 
     Main.workOnNumAttr(new AgeAttribute) // SHOULD COMPILE 
     //Main.workOnNumAttr(new ColorAttribute) // SHOULD NOT COMPILE 
    } 

    def workOnNumAttr[T <: [???] (attr: T) { // requires Attribute AND NumAttr 
     println (attr.name) 
     println (attr.defaultVal) 
    } 
} 

我该怎么办呢?

PS:基类和特质需要保持独立

+1

这是http://stackoverflow.com/questions/1491283 – 2011-03-07 11:01:32

+0

的副本很酷 - 谢谢。 – stephanos 2011-03-07 12:01:49

回答

10
def workOnNumAttr[T <: Attribute with NumAttr] (attr: T) { 
    println (attr.name) 
    println (attr.defaultVal) 
}