泛型概述

先看下面的代码:

ArrayList al1 = new ArrayList();
ArrayList al2 = new ArrayList(); al1.add("hello");
al1.add("world");
al1.add("abc");
al1.add("hello");
al1.add("1234");
al1.add("abc");
al1.add("hello"); for(int i = 0;i<al1.size();i++){
//获取每一项
String s = (String)al1.get(i);
if(!al2.contains(s)){
al2.add(s);
}
}
for (Object object : al2) {
System.out.println(object);
}

根据集合的用法来存取数据上面看起来很爽的样子  但是如果我们要往集合存取不一样的类型时  往集合里添加数据很方便但是  等到我们取的时候问题很多  会出现不同的类型安全的问题,为了解决这一问题  我们需要限制一个集合只能存取一种类型   这就是我们所说的泛型

虽然上面的例子取的时候可以将数据统一成 string类型 需要强转类型    因为默认从集合中取数据时返回的都是Object类型(类的鼻祖 所有的类型都继承Object类型并且里面包含了一个自动向上转型 即任何的对象都可以赋值给一个Object类型的变量 但是有个缺点是 Object类型的变量不能直接调用子类中独有的方法  可以用向下转型解决)

下面来看使用泛型的代码:

ArrayList<String> al1 = new ArrayList<>();
ArrayList<String> al2 = new ArrayList<>(); al1.add("hello");
al1.add("world");
al1.add("abc");
al1.add("hello");
al1.add("1234");
al1.add("abc");
al1.add("hello"); for(int i = 0;i<al1.size();i++){
//获取每一项
String s = al1.get(i);
if(!al2.contains(s)){
al2.add(s);
}
}
for (String s : al2) {
System.out.println(s);
}

总结:

1.集合默认可以存任意类型的数据,貌似功能十分强大,  存的时候很爽,取得时候问题很多   类型安全问题
2.解决的思路:限制一个集合中只能存一种类型的数据
3.泛型技术就可以限制一个集合中只能存一种类型的数据
4.怎么使用泛型
  ArrayList<String> al=new ArrayList<String>();
5.使用了泛型后,在取数据的时候根本就不需要进行强制
6.泛型技术出现在JDK5
7.在JDK7的时候,推出了一种简化的写法:菱形写法
  ArrayList<String> al=new ArrayList<>();
8.泛型只支持引用数据类型,对于基本数据类型要用他们的包装类
9.所有的集合类都支持泛型

泛型的底层原理

包括泛型方法、泛型类、泛型接口

不管是创建泛型方法还是泛型类还是泛型接口都需要遵循以下三点:

1、声明

2、使用

3、赋值类型

泛型方法:

泛型类

泛型接口:

java的泛型的更多相关文章

  1. [改善Java代码]Java的泛型是类型擦除的

    泛型可以减少强制类型的转换,可规范集合的元素类型,还可以提高代码的安全性和可读性,正是因为有了这些优点,自从Java引入泛型之后,项目的编码规则上便多了一条,优先使用泛型. Java泛型(Generi ...

  2. Java 中泛型的全面解析(转)

    Java泛型(generics) 是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换.泛型最主要的应用是在J ...

  3. Java中泛型 类型擦除

    转自:Java中泛型是类型擦除的 Java 泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,但有一点需要注意:Java 的泛型在编译器有效,在运行期被删除,也就是说所有泛型参数类 ...

  4. Java 泛型 Java使用泛型的意义

    Java 泛型 Java使用泛型的意义 @author ixenos 直接意义 在编译时保证类型安全 根本意义 a) 类型安全问题源自可复用性代码的设计,泛型保证了类型安全的复用模板 b) 使用复用性 ...

  5. 跟着刚哥梳理java知识点——泛型(十三)

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] a ...

  6. 【Java】泛型学习笔记

    参考书籍 <Java核心技术:卷1> 泛型, 先睹为快 先通过一个简单的例子说明下Java中泛型的用法: 泛型的基本形式类似于模板, 通过一个类型参数T, 你可以"私人定制&qu ...

  7. [转] Java 的泛型擦除和运行时泛型信息获取

    原文链接 https://my.oschina.net/lifany/blog/875769 前言 现在很多程序员都会在简历中写上精通 Java.但究竟怎样才算是精通 Java 呢?我觉得不仅要熟练掌 ...

  8. Java 容器 & 泛型:五、HashMap 和 TreeMap的自白

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Java 容器的文章这次应该是最后一篇了:Java 容器 系列. 今天泥瓦匠聊下 Maps. 一.Ma ...

  9. 【译】9. Java反射——泛型

    原文地址:http://tutorials.jenkov.com/java-reflection/generics.html ===================================== ...

  10. Java“禁止”泛型数组

    Java“禁止”泛型数组 原文:https://blog.csdn.net/yi_Afly/article/details/52058708 1. 泛型定义泛型编程是一种通过参数化的方式将数据处理与数 ...

随机推荐

  1. Xamarin控件使用之ListView

    listview单列多行的显示,以后再加多列多行的实例. [Activity(Label = "GraphicAll", LaunchMode = LaunchMode.Singl ...

  2. 使用JDBC中的出现的乱码和查询无结果问题

    使用JDBC中的问题 连接的后出现查询结果是乱码. 1.可能是代码的编码与数据库的编码不同 ​ 有可以将二者都设置为UTF-8 2.如果比较懒得话可以只设代码为UTF-8 mysql 连接url中us ...

  3. Linux入门(2)_给初学者的建议

    1 学习Linux的注意事项 严格区分大小写(命令, 文件, 选项) Linux中所有内容以文件形式保存, 包括硬件 硬盘文件是/dev/sd[a-p] 光盘文件是/dev/sr0等 Linux不靠扩 ...

  4. 多线程里面的关键字,wait, notfiy, 锁(synchronized), lock接口

    多线程环境下,必须考虑线程同步的问题,这是因为多个线程同时访问变量或者资源时会有线程争用,比如A线程读取了一个变量,B线程也读取了这个变量,然后他们同时对这个变量做了修改,写回到内存中,由于是同时做修 ...

  5. 新概念英语(1-73)The way to King Street

    The way to King Street 到国王街的走法Why did the man need a phrasebook?Last week Mrs. Mills went to London. ...

  6. EasyUI中datagrid的基本用法

    EasyUI中datagrid是最常用的一个控件了,现在整理一下datagrid的基本语法,先展示下页面效果吧,如下图

  7. Window7下安装Jmeter

    解压Jmeter,存放位置为D:\apache-jmeter-2.11 用户变量——>新建变量名JMETER_HOME,变量值为存放目录 系统变量——>添加;%JMETER_HOME%/l ...

  8. 测试驱动开发实践5————testSave之修改文档分类

    [内容指引] 1.确定"修改文档分类"的微服务接口及所需的参数 2.设计测试用例及测试用例合并 3.为测试用例赋值并驱动开发 上一篇我们通过17个测试用例完成了"新增文档 ...

  9. 一种dubbo逻辑路由方案(服务化隔离环境)

    背景介绍 现在很多的公司都在用dubbo.springcloud做为服务化/微服务的开发框架,服务化之后应用越来越多,链路越来越长,服务环境的治理变的很困难.比如:研发团队的人很多的,同时有几个分支在 ...

  10. Hive函数:SUM,AVG,MIN,MAX

    转自:http://lxw1234.com/archives/2015/04/176.htm,Hive分析窗口函数(一) SUM,AVG,MIN,MAX 之前看到大数据田地有关于max()over(p ...