Java Quickies.ジェネリック
序章
ジェネリックとは?
< >
これらの 2 つの小さな山括弧を見たことがあると思います.Java でジェネリックが可能になるのは、それらのおかげです.ジェネリックにより、クラス、インターフェイス、またはメソッドを定義するときに、型 (クラスとインターフェイス) をパラメーターにすることができます.通常のメソッドでパラメータを定義する場合と同様です.違いは、メソッドへの入力は値を使用するのに対し、<>
への入力は型 (クラス、インターフェイス) ジェネリックを使用する理由
1) : コンパイル時の型チェックを強化します.これは、コンパイラがエラーを検出できることを意味し、ランタイム エラーの一部を排除します.ランタイム エラーは、アプリをクラッシュさせるエラーです.
2) : キャストの削除.キャストに慣れていない場合は、変数を別の型の変数として動作させるプロセスです.以下のキャストの使用例:
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
(String)
構文がなくなっていることに注意してください.この変更は小さいように見えるかもしれませんが、エラーの排除に役立ちます.次に、非ジェネリック クラスとジェネリック クラスの例に移りましょう. 非ジェネリック クラス
public class Box {
private Object object;
public Box (Object object){
this.object = object;
}
public void set(Object object) { this.object = object; }
public Object get() { return object; }
}
Bob box = new Box("It do be like that sometimes")
ジェネリック クラス
public class Box<T> {
// T stands for "Type"
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}
Box<Integer> integerBox = new Box<Integer>();
// creating a generic box
Object
を T
に置き換え、いくつかの山括弧を追加しただけです (詳細は後述).これにより、コンパイラはコードを実行する前に型チェックを行うことができ、実行時エラーが大幅に減少します. ダイヤモンド <>
Box <Integer> intBox = new Box<>()
のようなものを見たことがあると思いますが、空の <>
はどういう意味ですか?簡単に言えば、コンパイラは型を推測しているので、それが何であるかを明示的に述べる必要はありません. 結論
-これはジェネリックの表面レベルの理解にすぎません.ドキュメント HERE を確認してください.
Reference
この問題について(Java Quickies.ジェネリック), 我々は、より多くの情報をここで見つけました https://dev.to/theplebdev/java-quickies-generics-31niテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol