generics - Types in Scala - lower bounds -


on code below.

my expectation t must of type b or a, call lowerbound(new d) should not compile (?). similar experiments upperbound give me expected typecheck errors.

thanks giving hint.

object variancecheck {   class {     override def tostring = this.getclass.getcanonicalname   }    class b extends   class c extends b   class d extends c    def lowerbound[t >: b](param: t) = { param }    println(lowerbound(new d))                      //> variancecheck.d } 

with implementation can write:

scala>   def lowerbound[t >: b](param: t) = { param } lowerbound: [t >: b](param: t)t  scala> lowerbound(new anyref {}) res0: anyref = $anon$1@2eef224 

where anyref super type of object/reference types (actually alias java object class). , right, t >: b expresses type parameter t or abstract type t refer supertype of type b.

you have bad example tostring, cause method has object types, if change to, let's on somemethod, lowerbound won't compile:

<console>:18: error: value somemethod not member of type parameter t        def lowerbound[t >: b](param: t) = { param.somemethod } 

if change t <: b, means parameter of type t subclass of b, good, cause param has somemethod method:

def lowerbound[t <: b](param: t) = { param.somemethod } 

Comments

Popular posts from this blog

java.util.scanner - How to read and add only numbers to array from a text file -

rewrite - Trouble with Wordpress multiple custom querystrings -