首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getClass和类型擦除?

getClass和类型擦除?
EN

Stack Overflow用户
提问于 2014-07-22 06:16:03
回答 2查看 102关注 0票数 0

在泛型情况下使用getClass方法时,我有点困惑:

代码语言:javascript
复制
def a[K](key: K) = {
  println(key.getClass)
}

这不是应该一直是AnyRef还是其他什么的吗?因为Since类型在运行时不可用?

但是a(3)将输出Inta("fdasf")将输出String.

好吧,这是个愚蠢的问题,我被K键的类型信息搞糊涂了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-22 06:55:58

编译时编译器不知道K的类型,但在运行时总是传入特定类型的对象。每个对象都知道它是什么类型。当调用getClass时,在对象上调用一个方法,因此得到它的实际类型。

票数 2
EN

Stack Overflow用户

发布于 2014-07-22 06:38:19

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24880167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档