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

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,因此它无法真正告诉您所要求的内容没有意义.

(编辑:李大同)

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

    推荐文章
      热点阅读