我注意到 2.9.0-1 中的这种破坏(对我来说与 OGNL 一起使用)变化:
我发现,在 2.9 中,在 trait 中声明的方法在混合到类中时会变得易变:
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(为什么我不知道)。
所以 - 我的问题是;为什么会做出这样的改变?