Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java

Javaの型とは?ジェネリクスの基本や使い方をご紹介

投稿日:2021年1月5日 更新日:

<目次>

(1) Javaの型とは?ジェネリクスの基本や使い方をご紹介
 (1-1) <T>とは?ジェネリクスとは?
 (1-2) ジェネリクスを使う利点
 (1-3) ジェネリクスをクラスやメソッドで使用する方法
 (1-4) サンプルプログラム

(1) Javaの型とは?ジェネリクスの基本や使い方をご紹介

(1-1) <T>とは?ジェネリクスとは?

<T>は「ジェネリクス」と呼ばれる、汎用的なクラスやメソッドの定義に使われる機能を表す記述の事で、「型パラメータ」と呼ばれています。JDK 5.0より導入されました。

宣言時点ではデータ型は<T>と未確定で、インスタンス化やメソッドに与えた引数を「型」が判断されて決まります。これを使う事で、1つのクラスやメソッドの宣言で、様々な「型」で利用する事ができます。
(図111)

目次にもどる

(1-2) ジェネリクスを使う利点

主に次に示す目的で使用します。

①共通的なクラスやメソッド定義
複数のデータ型で使える「共通的なクラスやメソッド」を作る事ができます。

②複数データ型対応のソートメソッド
具体的な利用シーンとして、例えば「Arrayをソートするためのメソッド」を作り、様々な型(StringやIntegerやDoubleなど)でソートを利用する等が考えられます。
 
③品質の向上
コンパイル時に誤ったデータ型によるインスタンス化/メソッド実行を検知できます。
 
次の節では「クラス」と「メソッド」でGenericsを使う例を見たいと思います。

 
目次にもどる

(1-3) ジェネリクスをクラスやメソッドで使用する方法

まずは「クラス」でGenericsを使用する方法をご紹介します。

■構文:ジェネリクスによるクラスの宣言
クラス名の後に<T>を付けて宣言します。

class [クラス名]<T> {
  //[クラスの定義]
}

 

■構文:ジェネリクスによるクラスをインスタンス化
例では<String>の記述により、このインスタンス内の<T>ではString型の引数のみが代入できるように限定しています。

[クラス名]<[データ型]> [インスタンス名] = new [クラス名]<[データ型]>();

//(例)
Car<String> cname = new Car<String>();

 

■構文:ジェネリクスによるメソッド定義
通常、データ型(intやString)を記述する「戻り値の型」や「引数の型」で「T」を使います。

public T [メソッド名](T [引数名]) {
 //[メソッドの処理]
}
 
(お作法)
①「型パラメータ」は<>で囲んで<T>のように書きます。
②「型パラメータ」Tにはプリミティブ型は指定できません(「int」や「double」や「char」等)
③「型パラメータ」は複数個を指定する事ができ、その場合はカンマで区切ります。
 

(1-4) サンプルプログラム

最後に上記を動く形で一連のプログラムにしたものをご紹介します。

このサンプルでは「Car」というジェネリクスのクラスを定義し、それをStringやIntegerやDoubleなど様々な型で利用しています。Stringで利用する場合は「車の名前」を保持する目的で使い、Integerで利用する場合は「車の価格」を保持する目的で使い、Doubleで利用する場合は「車重」を保持する目的でインスタンス化しています。

(サンプルプログラム)

//Genericsによるクラスをテストするためのドライバークラス
public class IT02xx_GenericsTest {
  public static void main(String args[]) {
    //Genericsによるクラスのインスタンス化

    //(1)String型でインスタンス化
    Car<String> cname = new Car<String>();
    // 上記でStringを指定しているため、setTメソッドの引数はString型を与えます。
    String carname = cname.setT("○○号");
    System.out.println("Car name is "+carname);

    //(2)Integer型でインスタンス化
    Car<Integer> cprice = new Car<Integer>();
    // 上記でIntegerを指定しているため、setTメソッドの引数はInteger型を与えます。
    Integer carprice = cprice.setT(2500000);
    System.out.println("Car price is "+carprice+" 円です");

    //(3)Double型でインスタンス化
    Car<Double> cweight = new Car<Double>();
    // 上記でDoubleを指定しているため、setTメソッドの引数はDouble型を与えます。
    Double carweight = cweight.setT(1625.65);
    System.out.println("Car weight is "+carweight+" kgです");
  }
}
//Genericsによるクラス定義
class Car<T> {
  //インスタンス変数(staticなし)を型パラメータを使い宣言
  private T car;
  //Genericsによるメソッド定義(セッターメソッド)
  public T setT(T car) {
    this.car = car;
    return this.car;
  }
}

(図141)実行結果

目次にもどる 

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

JavaScriptのオブジェクト(object)の書き方やメソッドを追加する方法

  <目次> (1) JavaScriptのオブジェクト(object)の書き方やメソッドを追加する方法  (1-1) 構文①:オブジェクト作成  (1-2) 構文②:オブジェクトにアクセス …

Javaのprintfで日付の書式設定を行う方法

<目次> (1) Javaのprintfで日付の書式設定を行う方法  (1-1) printfの基本構文  (1-2) 時刻に関するフォーマット  (1-3) 日付に関するフォーマット (1) Jav …

JavaでJSON配列から値を抽出する方法+郵便番号検索APIのサンプルプログラムも紹介

(0)目次&概説 (1) 記事の目的  (1-1) 目的  (1-2) 前提条件 (2) JSON配列から値抽出する方法  (2-1) JSON配列のデータの構造例  (2-2) JSON配列のデータ …

「サーブレットコンテナ」や「サーブレットのライフサイクル」とは?(サンプルプログラム付)

※本記事は「サーブレットとは?その役割やHelloWorldサンプルコードのご紹介」の続編です。 (0)目次&概説 (2) サーブレットコンテナの基本  (2-1) サーブレットコンテナとは?  (2 …

Javaのフォーム認証でログインを行うと数回で固まってしまう事象の対処記録

<目次> (1) Javaのフォーム認証でログインを行うと数回で固まってしまう事象の対処記録  (1-1) 発生事象・エラーメッセージ  (1-2) 原因  (1-3) 対策 (1) Javaのフォー …

  • English (United States)
  • 日本語
Top