scala – 当在2.9.0-1但不是2.8.1中的具体类中混合时,trait中的
发布时间:2020-12-16 08:47:41 所属栏目:安全 来源:网络整理
导读:我注意到这个破坏(对我来说使用它与OGNL)在2.9.0-1中的变化: 我发现,在2.9中,当在类中混合时,在特征中声明的方法变得易变: 2.9.0-1中的示例 import java.lang.reflect.Modifiertrait SuperTrait { def getKnoll = "Kanutten"}class KlassWithKnoll extends
我注意到这个破坏(对我来说使用它与OGNL)在2.9.0-1中的变化:
我发现,在2.9中,当在类中混合时,在特征中声明的方法变得易变: 2.9.0-1中的示例 import java.lang.reflect.Modifier trait SuperTrait { def getKnoll = "Kanutten" } class KlassWithKnoll extends SuperTrait { def getKnall = "Mars" } val qsc = classOf[KlassWithKnoll] val knollGetter = qsc.getDeclaredMethod("getKnoll") println("isVolatile: " + Modifier.isVolatile(knollGetter.getModifiers())) 打印出来 isVolatile: true 但是在2.8.1中: 它打印出来 isVolatile: false 这对我来说实际上是一个突破性的变化,因为OGNL拒绝在其表达式中执行volatile(为什么我不知道). 所以 – 我的问题是;为什么要做出这种改变? 解决方法
没有挥发性方法这样的东西.你看到的是设置了0x0040标志,对于字段是ACC_VOLATILE,对于方法是ACC_BRIDGE.由于Modifier.isVolatile方法采用了Int,因此它无法真正告诉您所要求的内容没有意义.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |