9 votes

Signification du signe dollar dans le descripteur de méthode Java ?

Par exemple, il fait partie de la pile RVM de Jikes.

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" doit être un nom de méthode. Mais j'ai vérifié le code source de la classe et ses interfaces, il n'y a pas de méthode appelée 'access'. Je n'ai pas trouvé de réponse sur Google, car celui-ci déteste toutes sortes de ponctuations. Quelqu'un peut-il m'aider ? Merci beaucoup.

11voto

Paul Bellora Points 26524

Cité dans le article lié par @birryree :

Un membre privé m d'une classe C peut être utilisé par une autre classe D, si une classe englobe l'autre, ou si elles sont englobées par une classe commune. Comme la machine virtuelle ne connaît pas ce type de regroupement, le compilateur crée un protocole local de méthodes d'accès en C pour permettre à D de lire, écrire ou appeler le membre m. Ces méthodes ont des noms de la forme access$0, access$1, etc. Ils ne sont jamais publics. Les méthodes d'accès sont uniques en ce sens qu'elles peuvent être ajoutées aux classes englobantes, et pas seulement aux classes internes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X