2010-10-22 9 views
8

Comment puis-je transmettre le paramètre enum par référence dans java? Toute solution?passant enumant par ref en java

+3

Quel est le cas d'utilisation? –

+1

La raison normale pour "passer un argument par référence" est que vous voulez le modifier. Vous pouvez le faire généralement en Java parce que les variables sont en fait des références - cependant modifier une énumération est généralement une très mauvaise idée. – DJClayworth

Répondre

5

En Java, vous ne pouvez transmettre aucun paramètre par référence.

La seule solution de contournement que je peux envisager serait de créer une classe wrapper et envelopper une énumération.

public class EnumReference { 
    public YourEnumType ref; 
} 

Et alors vous l'utiliser comme ceci:

public void someMethod(EnumReference reference) { 
    reference.ref = YourEnumType.Something; 
} 

Maintenant, la référence contiendra une valeur différente pour votre ENUM; essentiellement imitant pass-by-référence.

+0

J'ai créé un type générique 'IndirectReference ' spécifiquement pour ce genre de choses. Je me suis fatigué de passer des tableaux autour. – Jonathan

+0

@Jon, bon appel. En général, je ne semble pas avoir de problème avec la valeur de transmission. Ne semble jamais me gêner. – jjnguy

+4

@Jonathan: Vous pouvez également utiliser 'AtomicReference'. – ColinD

11

Java est passé par la valeur - toujours.

Vous transmettez des références, pas des objets. Les références sont transmises par valeur.

Vous pouvez modifier l'état d'un objet modifiable auquel pointe la référence dans une fonction dans laquelle il est transmis, mais vous ne pouvez pas modifier la référence elle-même.

+0

Impossible d'imaginer pourquoi cela a été downvoted - pas du tout incorrect. Cinq ans. Idiot. – duffymo