この記事の内容は、Java のジェネリックとは何ですか? Java ジェネリックの詳細な紹介は、必要とする友人が参考にできることを願っています。
1. ジェネリックとは何ですか?
Java ジェネリック設計原則: コンパイル中に警告がない限り、実行時に ClassCastException 例外は発生しません。
ジェネリックス: 明確な型を処理します。オブジェクトの作成時またはメソッドの呼び出し時までは、明示的な特殊型です。
パラメータ化された型:
ArrayList
ArrayList
#プログラムはより堅牢です [コンパイル中に警告がない限り、実行時に ClassCastException 例外は発生しません]
可読性と安定性 [コレクションを作成する際の型は制限されています]
コレクションを作成するときに、コレクションのタイプを指定するので、拡張された for を使用してコレクションを走査できるようになります。
//创建集合对象 ArrayList<String> list = new ArrayList<>(); list.add("hello"); list.add("world"); list.add("java"); //遍历,由于明确了类型.我们可以增强for for (String s : list) { System.out.println(s); }
/* 1:把泛型定义在类上 2:类型变量定义在类上,方法中也可以使用 */ public class ObjectTool<T> { private T obj; public T getObj() { return obj; } public void setObj(T obj) { this.obj = obj; } }
public static void main(String[] args) {
//创建对象并指定元素类型 ObjectTool<String> tool = new ObjectTool<>(); tool.setObj(new String("钟福成")); String s = tool.getObj(); System.out.println(s); //创建对象并指定元素类型 ObjectTool<Integer> objectTool = new ObjectTool<>(); /** * 如果我在这个对象里传入的是String类型的,它在编译时期就通过不了了. */ objectTool.setObj(10); int i = objectTool.getObj(); System.out.println(i);
}
ジェネリック メソッドを定義します.... ジェネリックは最初に定義されてから使用されます
//定义泛型方法.. public <T> void show(T t) { System.out.println(t); }
ユーザーによって渡される型、戻り値は何ですか?
public static void main(String[] args) { //创建对象 ObjectTool tool = new ObjectTool(); //调用方法,传入的参数是什么类型,返回值就是什么类型 tool.show("hello"); tool.show(12); tool.show(12.5); }
サブクラスはジェネリック クラスの型パラメータ変数を明確に定義します
/* 把泛型定义在接口上 */ public interface Inter<T> { public abstract void show(T t); }
ジェネリック クラスを実装するクラスインターフェース...
/** * 子类明确泛型类的类型参数变量: */ public class InterImpl implements Inter<String> { @Override public void show(String s) { System.out.println(s); } }
4. 汎用アプリケーション
Web ページを作成するときは、複数の DAO を毎回作成する必要があることがよくありますが、これは少し面倒な場合があります。public abstract class BaseDao<T> { //模拟hibernate.... private Session session; private Class clazz; //哪个子类调的这个方法,得到的class就是子类处理的类型(非常重要) public BaseDao(){ Class clazz = this.getClass(); //拿到的是子类 ParameterizedType pt = (ParameterizedType) clazz.getGenericSuperclass(); //BaseDao<Category> clazz = (Class) pt.getActualTypeArguments()[0]; System.out.println(clazz); } public void add(T t){ session.save(t); } public T find(String id){ return (T) session.get(clazz, id); } public void update(T t){ session.update(t); } public void delete(String id){ T t = (T) session.get(clazz, id); session.delete(t); } }
rreeee
以上がJavaのジェネリックとは何ですか? Java ジェネリックの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。