Scala - 获取类成员的类型

时间:2016-11-02 05:34:15

标签: scala types

我需要上课#39;名称和类型。

我试过这段代码。

  case class test( name: String, num: Int, types: String)

  ru.typeOf[ test].members.foreach { x =>
      if( !x.isMethod)
      {
          println( x + " => " + x.name + " / " + x.typeSignature) 
          if( x.typeSignature == scala.Int) {

          }
          //if( x.typeSignature == java.lang.String) { // object java.lang.String is not a value

          //}
      }
  }
  

结果

     

值类型=> types / String

     

value num => num / scala.Int

     

value name => name / String

我可以获取所有名称和类型,但由于字符串类型的值,不能给出条件类型。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您应该使用typeOf获取String类型,例如:

x.typeSignature =:= typeOf[String]
  

=:=用于查看两者是否表示完全相同的编译时类型。 http://docs.scala-lang.org/overviews/reflection/symbols-trees-types.html

对于您的比较Int,您还应该比较x.typeSignature =:= typeOf[Int],直接比较scala.Int,您将收到以下警告:

<console>:18: warning: reflect.runtime.universe.Type and Int.type are unrelated: they will most likely never compare equal
       res23.typeSignature == scala.Int