A palavra-chave e os métodos nativos Java
1. Visão geral
Neste tutorial rápido, discutiremos o conceito da palavra-chavenative em Java e também mostraremos como integrar métodosnative no código Java.
2. A palavra-chavenative em Java
Em primeiro lugar, vamos discutir o que é uma palavra-chavenative em Java.
Simply put, this is a non-access modifier that is used to access methods implemented in a language other than Java like C/C++.
Ele indica a implementação dependente da plataforma de um método ou código e também atua como uma interface entreJNIe outras linguagens de programação.
3. Métodosnative
Um métodonative é um método Java (um método de instância ou um método de classe) cuja implementação também é escrita em outra linguagem de programação, como C / C ++.
Além disso, um método marcado comonative não pode ter um corpo e deve terminar com um ponto e vírgula:
[ public | protected | private] native [return_type] method ();
Podemos usá-los para:
-
implementar uma interface com chamadas ou bibliotecas do sistema escritas em outras linguagens de programação
-
acessar recursos de sistema ou hardware acessíveis apenas a partir de outro idioma
-
integrar código legado já existente gravado em C / C ++ em um aplicativo Java
-
chamar uma biblioteca compilada dinamicamente carregada com código arbitrário do Java
4. Exemplos
Vamos agora demonstrar como integrar esses métodos em nosso código Java.
4.1. Acessando código nativo em Java
Primeiro de tudo, vamos criar uma classeDateTimeUtils que precisa acessar um métodonative dependente da plataforma chamadogetSystemTime:
public class DateTimeUtils {
public native String getSystemTime();
// ...
}
Para carregá-lo, usaremos oSystem.loadLibrary.
Vamos fazer a chamada para carregar esta biblioteca em um sblockstatic para que esteja disponível em nossa classe:
public class DateTimeUtils {
public native String getSystemTime();
static {
System.loadLibrary("nativedatetimeutils");
}
}
Criamos uma biblioteca de vínculo dinâmico,nativedatetimeutils, que implementagetSystemTime em C ++ usando instruções detalhadas abordadas em nossoguide to JNI article.
4.2. Métodos de teste denative
Finalmente, vamos ver como podemos testar métodos nativos definidos na classeDateTimeUtils:
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());
}
}
Abaixo está a saída do logger:
[main] INFO c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018
Como podemos ver, com a ajuda da palavra-chavenative, somos capazes de acessar com sucesso uma implementação dependente da plataforma escrita em outra linguagem (em nosso caso C ++).
5. Conclusão
Neste artigo, aprendemos o básico sobrenative palavras-chave e métodos. Com um exemplo rápido, também aprendemos como integrá-los em Java.
Os trechos de código usados neste artigo sãoavailable over Github.