概要
このクイックチュートリアルでは、Javaのnativeキーワードの概念について説明し、ネイティブメ
Javaのネイティブキーワード
まず、Javaのネイティブキーワードとは何かについて説明しましょう。簡単に言えば、これはC/C++のようなJava以外の言語で実装されたメソッドにアクセスするために使用される非アクセス修飾子です。
これは、メソッドまたはコードのプラットフォーム依存の実装を示し、JNIと他のプログラミング言語との間のインターフェイスとしても機能します。
ネイティブメソッド
ネイティブメソッドは、Javaメソッド(インスタンスメソッドまたはクラスメソッドのいずれか)であり、その実装はC/C++などの別のプログラミング言語でも記述されています。また、ネイティブとしてマークされたメソッドは本文を持つことはできず、セミコロンで終わる必要があります。
native method ();
それらを使用して:
- 他のプログラミング言語で書かれたシステムコールまたはライブラリを持つインターフェイスを実装する
- 他の言語からのみ到達可能なシステムまたはハードウェアリソースにアクセスする
- C/C++で書かれた既存のレガシーコードをJavaアプリケーションに統合する
- Javaから任意のコードでコンパイルされた動的にロードされたライブラリを呼び出す
例
これらのメソッドをJavaコードに統合する方法を説明しましょう。
4.1. Javaでネイティブコードにアクセスする
まず、getSystemTimeという名前のプラットフォーム依存のネイティブメソッドにアクセスする必要があるDateTimeUtilsクラスを作成してみましょう。
public class DateTimeUtils { public native String getSystemTime(); // ...}
それをロードするには、システムを使用します。ロードライブラリ。
このライブラリを静的ブロックにロードして、クラスで使用できるようにしましょう。
public class DateTimeUtils { public native String getSystemTime(); static { System.loadLibrary("nativedatetimeutils"); }}
c++でgetSystemTimeを実装する動的リンクライブラリnativedatetimeutilsを作成しました。4.2.
ネイティブメソッドのテスト
最後に、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()); }}
以下はロガーの出力です。
INFO c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018
ご覧のように、nativeキーワードの助けを借りて、別の言語で書かれたプラットフォーム依存の実装にアクセスすることができます。ケースc++)。
結論
この記事では、ネイティブのキーワードとメソッドの基本を学びました。 簡単な例では、それらをJavaに統合する方法も学びました。
この記事で使用されているコードスニペットはGithubで入手できます。>>>コースをチェックしてください