在泛型情况下使用getClass方法时,我有点困惑:
def a[K](key: K) = {
println(key.getClass)
}这不是应该一直是AnyRef还是其他什么的吗?因为Since类型在运行时不可用?
但是a(3)将输出Int,a("fdasf")将输出String.
好吧,这是个愚蠢的问题,我被K键的类型信息搞糊涂了。
发布于 2014-07-22 06:55:58
编译时编译器不知道K的类型,但在运行时总是传入特定类型的对象。每个对象都知道它是什么类型。当调用getClass时,在对象上调用一个方法,因此得到它的实际类型。
发布于 2014-07-22 06:38:19
在运行时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.Doublehttps://stackoverflow.com/questions/24880167
复制相似问题