Синтетические методы, подобные этому, создаются для поддержки доступа к закрытым методам внутренних классов.Так как внутренние классы не были частью начальной версии jvm, модификаторы доступа не могли действительно обработать этот случай.Решением было создание дополнительных видимых для пакета методов, которые делегируют частной реализации.
public class Example {
private static class Inner {
private void innerMethod() { ... }
}
public void test() {
Inner inner = ...
inner.innerMethod():
}
}
Компиляция создаст новый метод класса Inner
, подобный этому:
static void access$000(Inner inner) {
inner.innerMethod();
}
И замените вызов в методе test
следующим образом:
Inner.access$000(inner);
Статический access$000
является видимым пакетом и поэтому доступен из внешнего класса, и находясь внутри того же класса Inner
, он можетделегат в личку innerMethod
.