Java中泛型是什么?Java泛型的详细介绍

如果下载的源码需要作者授权,请更换源码。本站免费分享资源不会增加授权

本篇文章给大家带来的内容是关于Java中泛型是什么?Java泛型的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、什么是泛型?
Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常.

泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型

参数化类型:

ArrayList<E>中的E称为类型参数变量

ArrayList<Integer>中的Integer称为实际类型参数

整个称为ArrayList<E>泛型类型

整个ArrayList<Integer>称为参数化的类型ParameterizedType

二、为什么需要泛型

有了泛型以后:

  • 代码更加简洁【不用强制转换】

  • 程序更加健壮【只要编译时期没有警告,那么运行时期就不会出现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);     } }

四、泛型的应用
当我们写网页的时候,常常会有多个DAO,我们要写每次都要写好几个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);     }  }

继承抽象DAO,该实现类就有对应的增删改查的方法了。

public class CategoryDao extends BaseDao<Category> {  } BookDao  public class BookDao extends BaseDao<Book> {  }
本文由(壳先生)整理自网络,如转载请注明出处:https://www.mrshell.com;
本站发布的内容若侵犯到您的权益,请邮件联系 i@mrshell.com 删除,我们将及时处理!
===========================================================================

1. 本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行测试。
2. 本站资源仅供学习和交流使用,版权归资源原作者所有,请在下载后24小时之内自觉删除。
3. 不得使用于非法商业用途,商用请支持正版!不得违反国家法律,否则后果自负!
4. 若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!

=================================================================

壳先生 » Java中泛型是什么?Java泛型的详细介绍

发表评论

提供最优质的资源集合

立即查看 了解详情