1. ホーム
  2. java

[解決済み] Javaにおける<E>構文の意味を教えてください。

2022-03-05 02:43:25

質問

検索してみたのですが、的確な検索パラメータが見つからず、また思いつきませんでした。

Javaを独学で勉強しているのですが、ある構文の意味がわからないようです。

public class Node<E>{
    E elem;
    Node<E> next, previous;
}

は何を意味しているのでしょうか? <E> を意味するのでしょうか? 矢印の中括弧はベクトルに関係するものだと漠然と覚えているのですが、上のコードからすると、列挙に関係するもののような気がしています。

何かお手伝いやご説明があれば、とてもありがたいです。 ありがとうございます。

解決方法は?

これらは ジェネリック .

一般に、これらによって タイプ (クラスとインターフェース) を、クラス、インターフェース、メソッドを定義する際のパラメータにすることができます。

ジェネリックスを使用すると、Javaのチュートリアルにあるように、ジェネリックスでないコードを使用するよりも多くの利点があります。

  • <強い コンパイル時の型チェックを強化しました。 Javaコンパイラは、汎用的なコードに対して強い型チェックを行い、型安全性に違反するコードがあればエラーを出します。コンパイル時のエラーを修正することは、見つけるのが難しい実行時のエラーを修正するよりも簡単です。

    例えば

    // without Generics
    List list = new ArrayList();
    list.add("hello");
    
    // With Generics
    List<Integer> list = new ArrayList<Integer>();
    list.add("hello"); // will not compile
    
    
  • プログラマが汎用的なアルゴリズムを実装できるようにすること。 ジェネリックスを使うことで、プログラマーは、異なる型のコレクションで動作し、カスタマイズ可能で、型安全で読みやすいジェネリックスアルゴリズムを実装することができる。

  • キャストの排除

    例えば、ジェネリックを使用しない以下のコードスニペットは、キャスティングが必要です。

    List list = new ArrayList();
    list.add("hello");
    String s = (String) list.get(0);
    
    

    ジェネリックスを使うように書き直すと、キャスティングが不要なコードになります。

    List<String> list = new ArrayList<String>();
    list.add("hello");
    String s = list.get(0); // no cast