web-dev-qa-db-fra.com

Peut-on utiliser match pour vérifier le type d'une classe

Je suis nouveau sur scala et j'apprends le mot clé match maintenant.

Je veux savoir si nous pouvons utiliser le mot clé match pour vérifier le type d'une classe. Mon code est:

object Main {
    def main(args: Array[String]) {
        val x = "AA"
        checkType(x)
    }

    def checkType(cls: AnyRef) {
        cls match {
            case String => println("is a String")
            case Date => println("is a Date")
            case _ => println("others")
        }
    }
}

Le code ne peut pas être compilé, donc, c'est impossible de faire ça? Quel est le scala-way pour vérifier le type d'une classe? Est-ce:

if(cls.isInstanceOf[String]) { ... }
else if(cls.isInstanceOf[Date]) { ... }
else { ... }

Droite?

49
Freewind

Ceci cependant sera compiler:

def checkType(cls: AnyRef) {                    
  cls match {                                 
    case s: String => println("is a String")
    case d: Date => println("is a Date")    
    case _ => println("others")             
  }                                                   
}

... ou la version simplifiée de cela:

def checkType(cls: AnyRef) =
  cls match {                                 
    case _: String => println("is a String")
    case _: Date => println("is a Date")    
    case _ => println("others")             
  }                                                   
83
Wilfred Springer

Vous avez besoin d'un identifiant avant l'annotation de type dans l'instruction case.

Essayez ceci et cela devrait fonctionner:

object Main {
    def main(args: Array[String]) {
        val x = "AA"
        checkType(x)
    }

    def checkType(cls: AnyRef) {
        cls match {
            case x: String => println("is a String:"+ x)
            case x: Date => println("is a Date:" + x)
            case _ => println("others")
        }
    }
}
13
Brian Hsu