gpt4 book ai didi

scala - 当在 2.9.0-1 但不是 2.8.1 中的具体类中混合时,trait 中的方法变成了 volatile 方法

转载 作者:行者123 更新时间:2023-12-01 02:46:19 24 4
gpt4 key购买 nike

我注意到 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(为什么我不知道)。

所以 - 我的问题是;为什么做出这样的改变?

最佳答案

没有 volatile 方法这样的东西。您所看到的是设置了 0x0040 标志,对于字段是 ACC_VOLATILE,对于方法是 ACC_BRIDGE。由于 Modifier.isVolatile 方法采用 Int,因此它无法真正告诉您您所要求的内容没有意义。

关于scala - 当在 2.9.0-1 但不是 2.8.1 中的具体类中混合时,trait 中的方法变成了 volatile 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6774232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com