我想将一个Class作为参数传递给Scala函数,如下所示:
def sampleFunc (c : Class) : List[Any]
Run Code Online (Sandbox Code Playgroud)
(附带问题:参数中的类型应该是Class还是Class [_]?)
我传递Class类型的原因是检查对象是否属于特定类型.目前,作为一种解决方法,我将一个示例对象传递给该方法并比较两个对象的.getClass结果.我几乎不认为这是理想的,我确信在Scala中有一种明确定义的传递类型的方法.
Her*_*lme 25
那么,对于你原来的问题:是的,你可以传递Scala Class作为参数.作为Class
一个类型构造函数,它需要一个具体的类型来使一个类型在参数中使用.您可以像使用的Class[_]
那样使用通配符存在类型.
def sample(c: Class[_]) = println("Get a class")
sample(classOf[Int])
Run Code Online (Sandbox Code Playgroud)
但是,如果要检查某个对象是否属于某种类型,我建议您=:=
结合使用默认参数
def checkType[T](obj: T)(implict ev: T =:= Int = null) =
if (ev == null) "get other"
else "get int"
checkType(123) // get int
checkType("123") // get other
Run Code Online (Sandbox Code Playgroud)
是.一般情况下它是ClassTag
/ TypeTag
- 见镜子和反射
import scala.reflect._
def runtimeClass[T: ClassTag] = classTag[T].runtimeClass
scala> runtimeClass[String]
res2: Class[_] = class java.lang.String
Run Code Online (Sandbox Code Playgroud)
如果你真的只需要检查编译时(正式)类型的相等性
scala> implicitly[String =:= Double]
<console>:14: error: Cannot prove that String =:= Double.
implicitly[String =:= Double]
^
Run Code Online (Sandbox Code Playgroud)
如果您确实只需要检查对象的类型:
scala> "aa".isInstanceOf[String]
res4: Boolean = true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25624 次 |
最近记录: |