Mot-clé et méthodes natifs Java

1. Vue d'ensemble

Dans ce rapide didacticiel, nous discuterons du concept de mot-clé natif en Java, et nous montrerons également comment intégrer des méthodes natives dans du code Java.

2. Le mot-clé natif en Java

Tout d'abord, discutons de ce qu'est un mot-clé natif en Java.

En termes simples, il s'agit d'un modificateur sans accès utilisé pour accéder aux méthodes implémentées dans un langage autre que Java comme C / C ++ .

Il indique la mise en œuvre dépendante de la plate-forme d'une méthode ou d'un code et agit également comme une interface entre JNI et d'autres langages de programmation.

3. Méthodes natives

Une méthode native est une méthode Java (une méthode d'instance ou une méthode de classe) dont l'implémentation est également écrite dans un autre langage de programmation tel que C / C ++.

De plus, une méthode marquée comme native ne peut pas avoir de corps et doit se terminer par un point-virgule:

[ public | protected | private] native [return_type] method ();

Nous pouvons les utiliser pour:

  • implémenter une interface avec des appels système ou des bibliothèques écrites dans d'autres langages de programmation
  • accéder aux ressources système ou matérielles accessibles uniquement à partir de l'autre langue
  • intégrer du code hérité déjà existant écrit en C / C ++ dans une application Java
  • appeler une bibliothèque compilée chargée dynamiquement avec du code arbitraire de Java

4. Exemples

Voyons maintenant comment intégrer ces méthodes dans notre code Java.

4.1. Accéder au code natif en Java

Tout d'abord, créons une classe DateTimeUtils qui doit accéder à une méthode native dépendante de la plate-forme nommée getSystemTime :

public class DateTimeUtils { public native String getSystemTime(); // ... }

Pour le charger, nous utiliserons le System.loadLibrary.

Plaçons l'appel pour charger cette bibliothèque dans un bloc statique afin qu'elle soit disponible dans notre classe:

public class DateTimeUtils { public native String getSystemTime(); static { System.loadLibrary("nativedatetimeutils"); } }

Nous avons créé une bibliothèque de liens dynamiques, nativedatetimeutils , qui implémente getSystemTime en C ++ en utilisant des instructions détaillées couvertes dans notre guide de l'article JNI.

4.2. Test des méthodes natives

Enfin, voyons comment nous pouvons tester les méthodes natives définies dans la classe DateTimeUtils :

public class DateTimeUtilsManualTest { @BeforeClass public static void setUpClass() { // .. load other dependent libraries System.loadLibrary("nativedatetimeutils"); } @Test public void givenNativeLibsLoaded_thenNativeMethodIsAccessible() { DateTimeUtils dateTimeUtils = new DateTimeUtils(); LOG.info("System time is : " + dateTimeUtils.getSystemTime()); assertNotNull(dateTimeUtils.getSystemTime()); } }

Voici la sortie de l'enregistreur:

[main] INFO c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018

Comme nous pouvons le voir, avec l'aide du mot-clé natif , nous sommes en mesure d'accéder avec succès à une implémentation dépendante de la plate-forme écrite dans un autre langage (dans notre cas C ++).

5. Conclusion

Dans cet article, nous avons appris les bases des mots-clés et méthodes natifs . Avec un exemple rapide, nous avons également appris à les intégrer dans Java.

Les extraits de code utilisés dans cet article sont disponibles sur Github.