79 votes

Java: le meilleur moyen de passer int par référence

J'ai une fonction d'analyse syntaxique qui analyse une longueur encodée à partir d'un tampon d'octets, elle renvoie la longueur analysée sous la forme d'un entier et prend un index dans la mémoire tampon sous la forme d'un argument entier. Je veux que la fonction mette à jour l'index en fonction de son analyse, c'est-à-dire veuille transmettre cet index par référence. En C, je ne ferais que passer un int * . Quel est le moyen le plus propre de le faire en Java? Je cherche actuellement à passer l'argument d'index. comme int[] , mais c'est un peu moche.

71voto

doublep Points 9701

Vous pouvez essayer d'utiliser org.apache.commons.lang.mutable.MutableInt de la bibliothèque Apache Commons. Il n'y a pas de moyen direct de faire cela dans la langue elle-même.

20voto

mikej Points 30224

Ce n'est pas possible en Java. Comme vous l'avez suggéré, un moyen consiste à passer int[] . Une autre solution consisterait à avoir une petite classe, par exemple IntHolder qui englobait int .

17voto

Yuval Adam Points 59423

Vous ne pouvez pas transmettre d'arguments par référence en Java.

Ce que vous pouvez faire, c'est envelopper votre valeur entière dans un objet mutable. Utiliser Apache Commons ' MutableInt est une bonne option. Une autre manière, un peu plus obscure, consiste à utiliser un int[] comme vous l’avez suggéré. Je ne l'emploierais pas car il est difficile de comprendre pourquoi vous enroulez un int dans un tableau à une seule cellule.

Notez que java.lang.Integer est immuable.

13voto

John Kugelman Points 108754

Enveloppez le tampon d'octet et l'index dans un objet ByteBuffer . Un ByteBuffer encapsule le concept de tampon + position et vous permet de lire et d'écrire à partir de la position indexée, qu'il met à jour au fur et à mesure.

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