2017-01-10 13 views
2
import scala.reflect.runtime.universe._ 
import scala.reflect.ClassTag 

class A 
class B 

def foo[A](x: A) = typeOf[A] match { 
    case x:A => println("this an A") 
    case _ => println("no match") 
    } 
} 

Но это будет доказывать бесполезно, как совпадения не возможно, я получаю:Функция принимает любой объект в качестве параметра

fruitless type test: a value of type runtime.universe.Type cannot also be a A 

Я хотел бы иметь foo принимать какие-либо type класса, от основных типов в пользовательский классы. Как мне это сделать?

+0

кейс x: Int => println ("this a Int"), вы не думаете, что следуете этому примеру? –

+0

typeOf [A] is not A –

ответ

2

Вы можете использовать ClassTag следующим образом, чтобы это произошло

import scala.reflect.ClassTag 

def foo[A: ClassTag](x: A) = x match { 
    case x: A => println(s"this an ${x.getClass}") 
    case _ => println("no match") 
} 

A может быть любого типа.