java.lang.class<>_与Java java.lang.Class <T>对象对应的Scala

根据“ Scala类型系统 ”,

val c = new C

val clazz = c.getClass              // method from java.lang.Object

val clazz2 = classOf[C]             // Scala method: classOf[C] ~ C.class

val methods = clazz.getMethods      // method from java.lang.Class

该classOf[T]方法返回Scala类型的运行时表示形式。它类似于Java表达式T.class。

使用classOf[T]非常方便,当你有,你想了解的信息的类型,而getClass便于检索从类型的实例相同的信息。

然而,classOf[T]并getClass返回略微不同的值,反映了类型擦除在JVM上的效果,在的getClass的情况下。

scala> classOf[C]

res0: java.lang.Class[C] = class C

scala> c.getClass

res1: java.lang.Class[_] = class C

这就是为什么以下方法不起作用的原因:

val xClass: Class[X] = new X().getClass //it returns Class[_], nor Class[X]

val integerClass: Class[Integer] = new Integer(5).getClass //similar error

有一张关于的回程类型的票证getClass。

(James Moore报告说该票是“现在”的,即两年后的2011年11月,已修复。

在2.9.1中,getClass现在执行:

scala> "foo".getClass

res0: java.lang.Class[_ <: java.lang.string class>

)

早在2009年:

如果Scala将getClass()的返回值当作java.lang.Class [T] forSome {val T:C}对待,其中C类似于删除getClass在其上的表达式的静态类型叫

它可以让我做下面的事情,想对一个类进行自省,但不需要一个类实例。

我还想限制我要反思的类的类型,所以我使用Class [_

注意:关于getClass,可能的解决方法是:

class NiceObject[T <: anyref : t>

def niceClass : Class[_ <: t x.getclass.asinstanceof>

}

implicit def toNiceObject[T <: anyref : t new niceobject>

scala> "Hello world".niceClass

res11: java.lang.Class[_ <: java.lang.string class>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值