2016-07-28 2 views
0

я могу захватить тип некоторого типа параметра класса следующим образом:Как указать SCALA параметр типа ограничения, когда также указав TypeTag

import scala.reflect.runtime.universe._ 

case class X[T:TypeTag]() { 
    val typ = typeOf[T] 
} 

Но как я могу сделать то же самое, если я хочу, чтобы обеспечить соблюдение типа ограничение:

trait SomeClass 

case class X[T<:SomeClass]() { 
    val typ = typeOf[T] 
} 

Это не работает:

case class X[T<:SomeClass with TypeTag]() { // TypeTag takes parameters 
    val typ = typeOf[T] 
} 

ни делает:

case class X[T<:SomeClass with TypeTag[T]]() { 

    val typ = typeOf[T] 
} 

X[String]()// type arguments [String] do not conform to method apply's type parameter bounds [T <: SomeClass with reflect.runtime.universe.TypeTag[T]] 

ответ

1
scala> case class X[T <: SomeClass : TypeTag]() { 
    val typ = typeOf[T] 
} 
defined class X