加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在scala中编译错误,原因:val num = 123; println(num.getClass(

发布时间:2020-12-16 09:08:27 所属栏目:安全 来源:网络整理
导读:我是斯卡拉的新手.我试过这段代码: val name = "mike"println(name.getClass()) 没关系,打印java.lang.String 但是,当我尝试: val num = 123println(num.getClass()) 有这样的编译器错误: type mismatch; found : Int required: ?{val getClass: ?} Note:
我是斯卡拉的新手.我试过这段代码:

val name = "mike"
println(name.getClass())

没关系,打印java.lang.String

但是,当我尝试:

val num = 123
println(num.getClass())

有这样的编译器错误:

type mismatch; found : Int required: ?{val getClass: ?} Note: primitive types are not implicitly 
 converted to AnyRef. You can safely force boxing by casting x.asInstanceOf[AnyRef].

我记得scala说“一切都是scala中的对象”,为什么我不能调用num.getClass()?以及如何解决它?

解决方法

是的,一切都是一个对象,但不一定是一个java类的实例/带有getClass()方法的东西:)

Java原始值(和Unit)是scala中的AnyVals(所谓的值类的实例),并且 – 只要可能 – 它们最后被编译为Java原语.当拳击不可能完成时(类似于Java中的自动装箱).但是 – 正如错误报告 – 在你的情况下拳击没有发生(“含蓄地”).值类没有getClass()方法 – >编译错误.

Java类是AnyRefs(引用类的实例= Java中的类实例). getClass可以正常工作:AnyRef几乎和java.lang.Object一样 – >它还有一个可以调用的getClass()方法.

正如错误建议你可以强制装箱,然后getClass()将对它起作用:

num.asInstanceOf[AnyRef].getClass

将打印

class java.lang.Integer

如果你想避免装箱(例如你想要区分原始值和盒装值),请查看HowTo get the class of _ :Any

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读