我注意到这种打破(对我来说,使用它与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(为什么我不知道)。
所以 - 我的问题是;为什么要做出这种改变?
答案 0 :(得分:3)
没有易变的方法。你看到的是设置了0x0040标志,对于字段是ACC_VOLATILE,对于方法是ACC_BRIDGE。由于Modifier.isVolatile方法采用了Int,因此它无法真正告诉您所要求的内容没有意义。