Vous pouvez utiliser une instruction switch dans votre code JNI ainsi, si vous:
- fournir un champ de valeur intégrale de votre classe Java ENUM.
- Définir un ensemble parallèle de constantes intégrales en C ou C++ (par exemple, par une autre énumération).
La définition redondante introduit un risque de divergence. Vous pouvez atténuer cela par:
- Documenter fortement le parallélisme des deux côtés. Cela fonctionne mieux si l'énumération est petite et change peu fréquemment.
- Génération du code à partir d'une source unique.
Par exemple, en Java, vous pourriez avoir:
public enum Foo {
FIRST(0),
SECOND(1);
public int getValue() { return m_value; }
private int m_value;
private Foo(int value) { m_value = value; }
}
Et en C++, vous pourriez avoir:
enum Foo {
FIRST = 0,
SECOND = 1
};
Pour une énumération parallèle, je fais personnellement toujours les valeurs enum explicite du côté C/C++. Sinon, une suppression d'un énumérateur des deux côtés peut entraîner une divergence des valeurs.
J'ai implémenté votre proposition dans Jace: https://sourceforge.net/projects/jace/ – Gili
Je suis heureux d'avoir pu vous aider. –
Vous n'en avez pas besoin. Javah fait déjà exactement cela. – EJP