Методы в признаке становятся изменчивыми методами, когда смешаны в конкретных классах в 2.9.0-1, но не 2.8.1 - PullRequest
4 голосов
/ 21 июля 2011

Я заметил, что это сломанное (для меня это с 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 (почему я не знаю) в его выражениях.

Итак, мой вопрос: Почему было сделано это изменение?

1 Ответ

3 голосов
/ 22 июля 2011

Нет такого понятия, как изменчивый метод.То, что вы видите, это то, что установлен флаг 0x0040, который является ACC_VOLATILE для полей, но ACC_BRIDGE для методов.Поскольку метод Modifier.isVolatile принимает Int, он не может сказать вам, что то, что вы спрашиваете, не имеет смысла.

...