为什么我不能将字段添加到scala隐式类?
发布时间:2020-12-16 09:07:15 所属栏目:安全 来源:网络整理
导读:为什么你不能在隐式类中添加字段? 例如,下面的代码不存储originalName字段 object Implicit1 { implicit class AI1(c: Class[_]) { private var originalName = "" def setOriginalName(str: String) = originalName = str def getOriginalName=originalNam
为什么你不能在隐式类中添加字段?
例如,下面的代码不存储originalName字段 object Implicit1 { implicit class AI1(c: Class[_]) { private var originalName = "" def setOriginalName(str: String) = originalName = str def getOriginalName=originalName } } 解决方法
隐式类是可以作为类的包装器隐式调用的类(在本例中是Class的实例).它绝对可以有变量;从这个意义上说,你的代码工作正常
问题是你无法获得AI1的实例.所以你创建它,加载var,然后扔掉它.它不是原始c:Class [_]实例的一部分;这里没有猴子修补.它只是节省你输入(新的AI1(c)).无论哪种方法都是你的东西. 如果你确实有办法获得AI1,你就不会再写c了. AI1不是Class [_]的代理,它只是拥有它的一个实例.现在你的getter和setter不会在暴露var时添加任何东西.所以你可能意味着类似的东西 implicit class AI1(val underlying: Class[_]) { var originalName = "" def hasName = this } 现在你可以做点什么了 val named = "fish".getClass.hasName named.originalName = "salmon" println(s"${named.originalName} ${named.underlying}") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |