Класс A
объявляет константу C
следующим образом:
public class A {
public static final int C = 10;
}
Эта константа используется в методе M
класса B
следующим образом:
public class B {
public int M() {
return A.C;
}
}
В байт-кодах класса B
метод M
выглядит так:
public other()I
L0
LINENUMBER 29 L0
BIPUSH 10
IRETURN
L1
LOCALVARIABLE this Lcalc/B; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
Итак, нигде в байт-коде нет ссылки на класс A
, потому что компилятор Java оптимизирует константные выражения во время компиляции (см. этот связанный вопрос).
Как избежать этого явления, чтобы собрать использование класса A
по классу B
?
C
в классеA
и поместил его в статическую конструкцию (вот как), как предлагает rveach здесь. Проблема в том, что он не меняет вызов в классеB
, поскольку значение «оптимизируется» во время компиляции. - person cesarsotovalero   schedule 17.04.2020