La parola chiave e i metodi nativi di Java

1. Panoramica

In questo breve tutorial, discuteremo il concetto della parola chiave nativa in Java e mostreremo anche come integrare metodi nativi nel codice Java.

2. La parola chiave nativa in Java

Prima di tutto, discutiamo cos'è una parola chiave nativa in Java.

In poche parole, si tratta di un modificatore di non accesso utilizzato per accedere ai metodi implementati in un linguaggio diverso da Java come C / C ++ .

Indica l'implementazione dipendente dalla piattaforma di un metodo o codice e funge anche da interfaccia tra JNI e altri linguaggi di programmazione.

3. Metodi nativi

Un metodo nativo è un metodo Java (un metodo di istanza o un metodo di classe) la cui implementazione è scritta anche in un altro linguaggio di programmazione come C / C ++.

Inoltre, un metodo contrassegnato come nativo non può avere un corpo e dovrebbe terminare con un punto e virgola:

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

Possiamo usarli per:

  • implementare un'interfaccia con chiamate di sistema o librerie scritte in altri linguaggi di programmazione
  • accedere alle risorse di sistema o hardware che sono raggiungibili solo dall'altra lingua
  • integrare il codice legacy già esistente scritto in C / C ++ in un'applicazione Java
  • chiamare una libreria compilata caricata dinamicamente con codice arbitrario da Java

4. Esempi

Dimostriamo ora come integrare questi metodi nel nostro codice Java.

4.1. Accesso al codice nativo in Java

Prima di tutto, creiamo una classe DateTimeUtils che deve accedere a un metodo nativo dipendente dalla piattaforma chiamato getSystemTime :

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

Per caricarlo, useremo System.loadLibrary.

Mettiamo la chiamata per caricare questa libreria in un blocco statico in modo che sia disponibile nella nostra classe:

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

Abbiamo creato una libreria a collegamento dinamico, nativedatetimeutils , che implementa getSystemTime in C ++ utilizzando istruzioni dettagliate trattate nella nostra guida all'articolo JNI.

4.2. Test di metodi nativi

Infine, vediamo come testare i metodi nativi definiti nella 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()); } }

Di seguito è riportato l'output del logger:

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

Come possiamo vedere, con l'aiuto della parola chiave nativa , siamo in grado di accedere con successo a un'implementazione dipendente dalla piattaforma scritta in un altro linguaggio (nel nostro caso C ++).

5. conclusione

In questo articolo, abbiamo appreso le basi delle parole chiave e dei metodi nativi . Con un rapido esempio, abbiamo anche imparato come integrarli in Java.

Gli snippet di codice utilizzati in questo articolo sono disponibili su Github.