java的泛型
泛型概述
先看下面的代码:
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的泛型的更多相关文章
- [改善Java代码]Java的泛型是类型擦除的
泛型可以减少强制类型的转换,可规范集合的元素类型,还可以提高代码的安全性和可读性,正是因为有了这些优点,自从Java引入泛型之后,项目的编码规则上便多了一条,优先使用泛型. Java泛型(Generi ...
- Java 中泛型的全面解析(转)
Java泛型(generics) 是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换.泛型最主要的应用是在J ...
- Java中泛型 类型擦除
转自:Java中泛型是类型擦除的 Java 泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,但有一点需要注意:Java 的泛型在编译器有效,在运行期被删除,也就是说所有泛型参数类 ...
- Java 泛型 Java使用泛型的意义
Java 泛型 Java使用泛型的意义 @author ixenos 直接意义 在编译时保证类型安全 根本意义 a) 类型安全问题源自可复用性代码的设计,泛型保证了类型安全的复用模板 b) 使用复用性 ...
- 跟着刚哥梳理java知识点——泛型(十三)
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] a ...
- 【Java】泛型学习笔记
参考书籍 <Java核心技术:卷1> 泛型, 先睹为快 先通过一个简单的例子说明下Java中泛型的用法: 泛型的基本形式类似于模板, 通过一个类型参数T, 你可以"私人定制&qu ...
- [转] Java 的泛型擦除和运行时泛型信息获取
原文链接 https://my.oschina.net/lifany/blog/875769 前言 现在很多程序员都会在简历中写上精通 Java.但究竟怎样才算是精通 Java 呢?我觉得不仅要熟练掌 ...
- Java 容器 & 泛型:五、HashMap 和 TreeMap的自白
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Java 容器的文章这次应该是最后一篇了:Java 容器 系列. 今天泥瓦匠聊下 Maps. 一.Ma ...
- 【译】9. Java反射——泛型
原文地址:http://tutorials.jenkov.com/java-reflection/generics.html ===================================== ...
- Java“禁止”泛型数组
Java“禁止”泛型数组 原文:https://blog.csdn.net/yi_Afly/article/details/52058708 1. 泛型定义泛型编程是一种通过参数化的方式将数据处理与数 ...
随机推荐
- 【iOS】swift 保持代码优美的10个方法
这篇Swift风格指南与你看到的其他的指南有所不同,此篇指南主要焦点集中在打印和Web展示的可读写上.我们创建此篇风格指南的目的,是为了让我们的图书.教程以及初学者套件中的代码保持优美和一致,即使我们 ...
- 搭建vue项目环境
前言 在开发本项目之前,我对vue,react,angular等框架了解,仅限于知道它们是什么框架,他们的核心是什么,但是并没有实际使用过(angular 1.0版本用过,因为太难用,所以对这类框架都 ...
- 构建微服务开发环境7————使用Github管理项目代码的版本
[内容指引] 1.注册GitHub帐号: 2.下载Github Desktop客户端: 3.macOS安装Github Desktop客户端: 4.windows安装Github Desktop客户端 ...
- WebDriverException : Missing 'type' parameter
下载最新的geckodriver即可 v0.17.0 Releases · mozilla/geckodriver · GitHubhttps://github.com/mozilla/geckodr ...
- NFS PersistentVolume - 每天5分钟玩转 Docker 容器技术(151)
上一节我们介绍了 PV 和 PVC,本节通过 NFS 实践. 作为准备工作,我们已经在 k8s-master 节点上搭建了一个 NFS 服务器,目录为 /nfsdata: 下面创建一个 PV mypv ...
- token 验证
组件: https://jwt.io/#libraries-io
- Java+Maven+selenium+testing+reportNG自动化测试框架
最近公司新出了一个产品,需要搭建自动化测试框架,这是一个学以至用的好机会,跟上级申请后,决定搭建一个java自动化测试框架. Java自动化测试对我来讲可以说不难不易,因为java是我大学在校四年学的 ...
- Spring知识点回顾(08)spring aware
Spring知识点回顾(08)spring aware BeanNameAware 获得容器中的bean名称 BeanFactoryAware 获得当前的bean factory Applicatio ...
- 新概念英语(1-41)Penny's bag
新概念英语(1-41)Penny's bag Who is the tin of tobacco for? A:Is that bag heavy, Penny? B:Not very. A:Here ...
- 新概念英语(1-37)Making a bookcase
What is Susan's favourite color ? A:You're working hard, Georage. What are you doing? B:I am making ...