È possibile utilizzare un'istruzione switch nel codice JNI pure, se:
- fornire un campo di valore integrale nella classe enum Java.
- Definire un insieme parallelo di costanti integrali in C o C++ (ad es. Con un'altra enumerazione).
La definizione ridondante introduce un rischio di divergenza. È possibile attenuarlo:
- Documentando molto il parallelismo su entrambi i lati. Funziona meglio se l'enumerazione è piccola e cambia raramente.
- Generazione del codice da una singola fonte.
Per esempio, in Java, si potrebbe avere:
public enum Foo {
FIRST(0),
SECOND(1);
public int getValue() { return m_value; }
private int m_value;
private Foo(int value) { m_value = value; }
}
E in C++, si potrebbe avere:
enum Foo {
FIRST = 0,
SECOND = 1
};
Per un conteggio parallelo, io personalmente sempre fare i valori enum esplicito sul lato C/C++. Altrimenti, la cancellazione di un enumeratore su entrambi i lati può far divergere i valori.
fonte
2010-10-24 15:19:16
Ho implementato la tua proposta in Jace: https://sourceforge.net/projects/jace/ – Gili
Contento di aver potuto aiutarti. –
Non ne hai bisogno. Javah fa già esattamente questo. – EJP