当在 2.9.0-1 中混合到具体类中时,特征中的方法会变成易失性方法,但 2.8.1 中不会

发布于 2024-11-25 20:32:12 字数 688 浏览 2 评论 0原文

我注意到 2.9.0-1 中的这一重大变化(对我来说与 OGNL 一起使用):

我发现在 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

This 实际上对我来说是一个重大变化,因为 OGNL 拒绝在其表达式中执行 volatile (为什么我不知道)。

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

I noticed this breaking (for me using it with OGNL) change in 2.9.0-1:

I find that, in 2.9, methods declared in a trait become volatile when mixed in a class:

Example in 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()))

This prints out

isVolatile: true

But in 2.8.1:

it prints out

isVolatile: false

This is actually a breaking change for me as OGNL refuses to execute volatile (why I don't know) in its expressions.

So - my question is; Why was this change made?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寻找一个思念的角度 2024-12-02 20:32:12

不存在“易失性方法”这样的东西。您看到的是设置了 0x0040 标志,对于字段来说是 ACC_VOLATILE,对于方法来说是 ACC_BRIDGE。由于 Modifier.isVolatile 方法采用 Int,因此它不能真正告诉您您所要求的没有意义。

There's no such thing as a volatile method. What you are seeing is that the 0x0040 flag is set, which is ACC_VOLATILE for fields, but ACC_BRIDGE for methods. Since the Modifier.isVolatile method takes an Int, it can't really tell you that what you're asking is not meaningful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文