在泛型类型的情况下,我对getClass方法感到有些困惑:
def a[K](key: K) = {
println(key.getClass)
}
这不应该是AnyRef或Any或者什么东西吗?由于K类信息在运行时不可用吗?
但a(3)
将输出Int
,a("fdasf")
将输出String.
好吧,这是一个愚蠢的问题,我对K和关键字类型的信息感到困惑。
答案 0 :(得分:2)
在编译时,编译器不知道K
的类型,在运行时,您总是传入特定类型的对象。每个对象都知道它是什么类型。当您调用getClass
时,您正在调用该对象上的方法,因此您将返回其实际类型。
答案 1 :(得分:1)
在运行时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