Значения знака доллара в дескрипторе метода Java? - PullRequest
8 голосов
/ 28 сентября 2011

Например, его часть стека Jikes RVM.

at [0x70cfba90, 0x708cfaa4] Lorg/apache/lucene/index/SegmentInfos; 
       **access$000**(Ljava/lang/String;)V
at [0x70cfbb04, 0x708b55c8] Lorg/apache/lucene/index/SegmentInfos$
       FindSegmentsFile; run()Ljava/lang/Object; at line 554
at [0x70cfbb24, 0x708c4a8d] Lorg/apache/lucene/index/SegmentInfos; 
       read(Lorg/apache/lucene/store/Directory;)V at line 272

'access' должно быть именем метода.Но я проверил исходный код класса и его интерфейсы, там нет метода, называемого «доступ».Я не смог найти ответ в Google, так как Google ненавидит все знаки препинания.Кто-нибудь может здесь помочь?Большое спасибо.

1 Ответ

11 голосов
/ 28 сентября 2011

Цитируется из статьи , связанной @ birryree :

Закрытый член m класса C может использоваться другим классом D, если один класс включает другой или если они заключены в общий класс. Поскольку виртуальная машина не знает об этом виде группировки, компилятор создает локальный протокол методов доступа в C, чтобы позволить D читать, записывать или вызывать член m. Эти методы имеют имена вида access $ 0, access $ 1 и т. Д. Они никогда не являются публичными. Методы доступа уникальны в том смысле, что они могут быть добавлены во вложенные классы, а не только во внутренние классы.

...