Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9のJShellでGsonライブラリをインポートして使う方法

Java 9では、対話型のREPLコマンドラインツール「JShell」が導入されました。JShellを使えば、Javaのコードスニペットをその場で実行し、結果を即座に確認できます。また、クラスパスを指定することで、外部のクラスやライブラリもJShellセッション内で利用可能になります。

Gsonライブラリは、JavaオブジェクトをJSONへ変換したり、その逆(JSONからJavaオブジェクトへの復元)を行うための、Java向けのシリアライズ/デシリアライズライブラリです。この記事では、JShellにGsonを読み込んで、実際にオブジェクトの変換を試すまでの手順を解説します。

1. クラスパスの設定

まず、/envコマンドを使って、GsonのJARファイルへのクラスパスをJShellに設定します。

jshell> /env --class-path C:\Users\User\gson.jar
|  新しいオプションを設定し、状態を復元しました。

2. Gsonパッケージのインポート

クラスパスを設定したら、import文でGsonのクラスを読み込みます。/importコマンドを実行すると、現在読み込まれているパッケージの一覧が表示され、その中にcom.google.gson.*が含まれていることを確認できます。

jshell> import com.google.gson.*

jshell> /import
|    import java.io.*
|    import java.math.*
|    import java.net.*
|    import java.nio.file.*
|    import java.util.*
|    import java.util.concurrent.*
|    import java.util.function.*
|    import java.util.prefs.*
|    import java.util.regex.*
|    import java.util.stream.*
|    import com.google.gson.*

jshell> Gson g = new GsonBuilder().setPrettyPrinting().create()
g ==> {serializeNulls:false,factories:[Factory[typeHier ... 78b9],instanceCreators:{}}

ここではGsonBuildersetPrettyPrinting()メソッドを呼び出すことで、インデント付きの見やすいJSONを出力するGsonインスタンスを作成しています。

3. サンプルクラス(Employee)の定義

次に、変換テストに使用するEmployeeクラスを定義します。JShellでは、通常のJavaプログラムと同じ構文で、その場でクラスを宣言できます。

jshell> class Employee {
...>       private String firstName;
...>       private String lastName;
...>       private String designation;
...>       private String location;
...>       public Employee(String firstName, String lastName, String designation, String location) {
...>          this.firstName = firstName;
...>          this.lastName = lastName;
...>          this.designation = designation;
...>          this.location = location;
...>       }
...>       public String getFirstName() {
...>          return firstName;
...>       }
...>       public String getLastName() {
...>          return lastName;
...>       }
...>       public String getJobDesignation() {
...>          return designation;
...>       }
...>       public String getLocation() {
...>          return location;
...>       }
...>       public String toString() {
...>          return "Name = " + firstName + ", " + lastName + " | " +
...>                 "Job designation = " + designation + " | " +
...>                 "location = " + location + ".";
...>    }
...>    }
|  クラスEmployeeが作成されました

続いて、このクラスのインスタンスを生成し、GsonのtoJson()メソッドでJSON文字列へ変換(シリアライズ)します。

jshell> Employee e = new Employee("Jai", "Adithya", "Content Developer", "Hyderabad");
e ==> Name = Jai, Adithya | Job designation = Content D ... er | location = Hyderabad.

jshell> String empSerialized = g.toJson(e)
empSerialized ==> "{\n  \"firstName\": \"Jai\",\n  \"lastName\": \" ... ation\": \"Hyderabad\"\n}"

4. シリアライズ結果の確認とデシリアライズ

System.out.println()で出力すると、整形されたJSONを確認できます。さらに、fromJson()メソッドを使えば、JSON文字列を再びEmployeeオブジェクトへ復元(デシリアライズ)できます。

jshell> System.out.println(empSerialized)
{
   "firstName": "Jai",
   "lastName": "Adithya",
   "designation": "Content Developer",
   "location": "Hyderabad"
}
jshell> Employee e1 = g.fromJson(empSerialized, Employee.class)
e1 ==> Name = Jai, Adithya | Job designation = Content D ... er | location = Hyderabad.

まとめ

JShellでは/env --class-pathコマンドで外部JARファイルをクラスパスに追加できるため、Gsonのようなサードパーティ製ライブラリも手軽に試せます。ソースファイルを作成してコンパイル・実行する必要がなく、オブジェクトとJSONの相互変換の動作をインタラクティブに検証できるのが大きなメリットです。APIの挙動確認や学習用途にぜひ活用してみてください。

  1. JavaのOpenCVライブラリを使って画像にノイズを追加する方法

    OpenCVを使用すると、ガウス分布に基づくランダムなノイズを画像へ簡単に追加できます。ここでは、JavaでOpenCVライブラリを利用して画像にノイズを加える手順を紹介します。 画像にノイズを追加する手順 対象となる画像を読み込み、Matオブジェクトに格納します。 ノイズ保存用と結果保存用として、さらに2つの空の行列(Mat)を作成します。 平均値と標準偏差を格納するためのMatOfDouble型の行列を2つ用意します。 meanStdDev()メソッドを使って、画像の平均値と標準偏差を取得します。 randn()メソッドを使って、ランダムな要素で満たされたノイズ用行列を生成します。このメ

  2. JavaとOpenCVライブラリを使って画像内の顔を検出する方法

    JavaでOpenCVを使用して画像から顔を検出するには、CascadeClassifierクラスを利用します。このクラスは、分類器ファイル(カスケードファイル)を読み込み、画像内から目的のオブジェクト(ここでは顔)を検出する役割を担います。 CascadeClassifierクラスとは CascadeClassifierは、OpenCVが提供する物体検出用のクラスです。事前に学習済みのカスケード分類器(XMLファイル)を読み込むことで、顔や人など特定のパターンを画像から認識できます。 detectMultiScale()メソッドについて このクラスが持つdetectMultiScale(