Tom*_*Tom 2 scala scala-reflect
我有一个简单的代码,
case class Person(name: String, age:Int)
import scala.reflect.runtime.universe._
val t1 = typeOf[Person]
val t2 = t1.dealias
println(t1 == t2)
Run Code Online (Sandbox Code Playgroud)
它输出为true,所以我想问一下Type.dealias的用途是什么?我什么时候应该使用它?一些代码示例会有所帮助
我之所以这样问,是因为当我阅读spark代码时ScalaReflection,它几乎总是dealias在使用类型之前使用
类型别名看起来像
type Alias = Person
Run Code Online (Sandbox Code Playgroud)
它声明Alias与相同的新类型Person。
dealias解决这些别名,因此typeOf[Alias].dealias将返回typeOf[Person]。因为Person不是别名,typeOf[Person].dealias所以不执行任何操作。
另请注意:
可以使用=:=检查类型是否相等。重要的是要注意==不应用于比较类型是否相等-在存在类型别名的情况下==不能检查类型是否相等,而=:=可以。