繁体   English   中英

Scala的getClass和类型擦除?

[英]scala getClass and type erasure?

在泛型类型的情况下使用时,我对getClass方法感到有些困惑:

def a[K](key: K) = {
  println(key.getClass)
}

这不应该一直是AnyRef或Any或其他东西吗? 由于类型K信息在运行时不可用?

但是a(3)将输出Int ,而a("fdasf")将输出String.


好吧,这是一个愚蠢的问题,我对K和key的类型信息感到困惑。

在编译时,编译器不知道K的类型,而在运行时,您总是传递特定类型的对象。 每个对象都知道它是什么类型。 调用getClass ,您正在对对象调用方法,因此可以获取其实际类型。

在运行时a(3)传递给a值是3 ,现在,如果编译器检查其值的类型,则它当然会返回Integer

scala>   def a[K](key: K) = {
     |   println(key.getClass)
     |   }
a: [K](key: K)Unit

scala> a(3)
class java.lang.Integer

scala> a("34")
class java.lang.String

scala> a(34.34)
class java.lang.Double

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM