A classOf[T]
è un valore di tipo Class[T]
. In altre parole, classOf[T]: Class[T]
. Ad esempio:
scala> val strClass = classOf[String]
strClass: Class[String] = class java.lang.String
scala> :t strClass
Class[String]
Questo permette di vincolare parametri utilizzati nei metodi riflettenti:
scala> :paste
// Entering paste mode (ctrl-D to finish)
sealed trait Fruit
case class Apple(name: String) extends Fruit
case class Pear(name: String) extends Fruit
// Exiting paste mode, now interpreting.
defined trait Fruit
defined class Apple
defined class Pear
scala> def fruitFunction(kind: Class[_ <: Fruit]) { println("Fruity...") }
fruitFunction: (kind: Class[_ <: Fruit])Unit
scala> fruitFunction(classOf[Apple])
Fruity...
scala> fruitFunction(classOf[String])
<console>:13: error: type mismatch;
found : Class[String](classOf[java.lang.String])
required: Class[_ <: Fruit]
fruitFunction(classOf[String])
errato. 'x.getClass()' corrisponde a 'x.getClass()' in Scala (parentesi opzionale). –
Questo non è corretto. 'classOf [X]' corrisponde a 'X.class' in Java - restituisce l'oggetto di classe' Class [X] '. –
Corretta la mia risposta dopo i commenti. –