Le Mot-clé et méthodes Java Natifs

Aperçu

Dans ce rapide tutoriel, nous allons discuter du concept du mot-clé natif en Java, et nous allons également montrer comment intégrer des méthodes natives dans le code Java.

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 de non-accès qui est utilisé pour accéder aux méthodes implémentées dans un langage autre que Java comme C / C++.

Il indique l’implémentation d’une méthode ou d’un code dépendant de la plate-forme et sert également d’interface entre JNI et d’autres langages de programmation.

Méthodes natives

Une méthode native est une méthode Java (soit une méthode d’instance, soit 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 :

 native method ();

Nous pouvons les utiliser pour:

  • implémentez une interface avec des appels système ou des bibliothèques écrites dans d’autres langages de programmation
  • accédez à des ressources système ou matérielles accessibles uniquement depuis l’autre langage
  • intégrez du code hérité déjà existant écrit en C/C++ dans une application Java
  • appelez une bibliothèque compilée chargée dynamiquement avec du code arbitraire de Java

Exemples

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

4.1. Accès 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 Système.Bibliothèque de chargement.

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 article guide to 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 :

 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++).

Conclusion

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

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

Commencez avec Spring 5 et Spring Boot 2, via le cours Learn Spring:

>>CONSULTEZ LE COURS

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.