java的泛型hei
泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候就可以使用泛型
泛型也可以看出是一个变量,用来接受数据类型
E e :Element 元素
T t: Type 类型

/*
Collection<E> extends Iterable<E>,所有单鞋集合恶斗可以使用增强for public interface Iterable<T>
实现此接口允许对象成为“for-each loop”语句的目标。 增强for循环,用来遍历结合和数组
格式:
for(集合/数组的数据类型 变量名:集合名/数组名){
sout(变量名)
}
*/
/*
使用泛型
避免类型转换的满分,存储时什么类型,出去就是什么类型
运行期间异常,提到编译期的异常
*/ ////创建集合对象,不用泛型
// 集合不使用泛型,默认的类型是object类型,可以存储任意类型的数据
// 不安全,会引发异常
public class DemoFor {
public static void main(String[] args) {
show1();
show2();
}
/*
使用泛型
避免类型转换的满分,存储时什么类型,出去就是什么类型
运行期间异常,提到编译期的异常
*/
private static void show2(){
ArrayList<String> list = new ArrayList<>();
list.add("BBB");
Iterator<String> it = list.iterator();
while (it.hasNext()){
String s = it.next();
// int i= it.next().length();不能进行流式编程
System.out.println(s);
System.out.println(s.length());
}
}
////创建集合对象,不用泛型
// 集合不使用泛型,默认的类型是object类型,可以存储任意类型的数据
// 不安全,会引发异常
private static void show1(){
ArrayList list = new ArrayList();
list.add("DDDD");
list.add(1);
// 迭代器遍历
Iterator it =list.iterator();
while (it.hasNext()){
Object obj = it.next();
System.out.println(obj);
// 想要使用String类特有的方法,length获取字符串的长度,
// 现在不能使用,因为多态 object obj = "obj" 不能使用子类特有的方法
// 需要向下转型 String s = (String)obj;
//// 会抛出异常ClassCastException,不能把Integer类型转换为String类型
// String s = (String)obj;
// System.out.println(s.length());
}
}
}
/*
DDDD
1
BBB
3
*/
自定义泛型:
自定义一个泛型类:
/*
定义含有泛型的类,模拟ArrayList
泛型是一个位置的数据类型,当我们不确定什么数据类型的时候,可以使用泛型
泛型可以接受任意数据类型,可以使用String ,Integer
创建对象的时候确定泛型的数据类型
*/
public class Gennerice<E> {
private E name; public E getName() {
return name;
} public void setName(E name) {
this.name = name;
}
}
实例化:
public class GenericeDo {
public static void main(String[] args) {
// 不写泛型,默认是objcet
Gennerice gc = new Gennerice();
gc.setName("dddd");
Object obj = gc.getName();
// 创建对象,使用泛型Intager
Gennerice<Integer> gc2 = new Gennerice<>();
gc2.setName(999);
Integer name = gc2.getName();
System.out.println(name);
// 使用字符串类型
Gennerice<String> gc3 = new Gennerice<>();
gc3.setName("RRRR");
String name2 = gc3.getName();
System.out.println(name2);
}
}
含有泛型的方法
/*
定义含有泛型的方法,泛型定义在修饰符和返回值之间
格式:
修饰符 <泛型> 返回值类型 方法名 (参数列表(使用泛型)){
方法体
}
含有泛型的方法,在调用方法的时候确定泛型的数据类型,传递什么类型的参数,泛型就是什么类型 */
public class GenericMethod {
public <M> void methon(M m){
System.out.println(m);
}
// 含有泛型的静态方法:
public static <S> void methon2(S s){
System.out.println(s);
}
}
测试:
public class GmTest {
public static void main(String[] args) {
GenericMethod gm = new GenericMethod();
// 调用泛型方法,传递什么类型就是什么类G型
gm.methon(10);
gm.methon("ddd");
gm.methon2("静态方法的调用,不建议创建对象使用");
// 静态方法,通过类名.方法名 直接调用
GenericMethod.methon2(999);
GenericMethod.methon2("quan");
}
}
/*
10
ddd
静态方法的调用,不建议创建对象使用
999
quan
*/
含有泛型的接口
public interface GenerInterface<I> {
// 抽象函数
public abstract void method(I i);
}
第一种使用方式:
/*
含有泛型的接口:第一种:定义接口的实现,指定接口的泛型
*/
public class GenInterTest implements GenerInterface<String> {
@Override
public void method(String s){
System.out.println(s);
} }
第二种使用方式:
/*
第二种使用方式,
接口使用什么泛型,实现类就使用什么泛型,类跟着接口走
相当于定义了一个含有泛型的类,实现对象的时候觉得泛型的数据类型
*/
public class GenInterTest2<I> implements GenerInterface<I>{
@Override
public void method(I i) {
System.out.println(i);
} }
测试:
public class GenInterTestALl {
public static void main(String[] args) {
GenInterTest git = new GenInterTest();
git.method("done");
//
GenInterTest2<Integer> git2 = new GenInterTest2<>();
git2.method(111);
GenInterTest2<String> git3 = new GenInterTest2<>();
git3.method("WUQN");
}
}
/*
done
111
WUQN
*/
泛型通配符:


泛型的上限限定:

java的泛型hei的更多相关文章
- [改善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 ===================================== ...
随机推荐
- Nexus6-刷LineageOS系统(Windows10处理环境下)
0.观前注意 本方法不一定保证正确,我只是通过了此方法进入了手机,但是仍然有少部分apk无法安装(比如v2rayNG),但是正常的浏览器和qq是能够正常运行的. 1.刷机准备 一台Nexus6手机(能 ...
- C#基础之Foreach
下面是Foreach的介绍. 如何让一个类可以用Foreach来遍历呢. 结论:让这个类实现IEnumerable接口. 这个类有一个public的GetEnumerator的实例方法,并且返回类型中 ...
- JavaWeb-JDBC-Mybatis-Junit-Maven-Lombok
Java与数据库 初识JDBC JDBC是什么? JDBC英文名为:Java Data Base Connectivity(Java数据库连接),官方解释它是Java编程语言和广泛的数据库之间独立于数 ...
- Qt:打印输出到控制台,类似C++的cout
1. #include<qDebug> 2. qDebug<<"Hello,world!"; 补充,如果不是控制台文件,比如是窗口应用程序,需要在pro文件 ...
- Python数据可视化 -- Wordcloud
Python数据可视化 -- Wordcloud 安装 启动命令行,输入:pip install wordcloud word cloud 库介绍 及简单使用 wordcloud库,可以说是pytho ...
- JavaScript与C#互通的DES加解密算法的实现(转)
本文提供了一个能使JavaScript与C#互通的DES加解密算法的实现,在前台页面中用JavaScript版本的DES算法将数据加密之后,传到服务器端,在服务器端可用C#版本的DES解密算法将其解密 ...
- Java递归与基础复习
Day01-基础复习,递归 1.递归 定义:指在当前方法内调用自己,即函数内部调用本函数 分类: 直接递归和间接递归 直接递归成为方法自身调用自己 间接递归可以A方法调用B方法,B方法调用C方法,C方 ...
- 云计算与云存储:使用云服务器搭建一个情侣纪念Web服务器
做完了实验一,做完感觉这门还是蛮好玩的,而且第一实验就很有趣,搭建了一个可以在公网访问的纪念网站给女朋友秀了一下.写好实验报告后简单搬运,应该能给感兴趣的朋友带来帮助. 创建阿里云主机 进入阿里云官方 ...
- 假如让你来设计SSL/TLS协议,你要怎么设计呢?
摘要:本文将从设计者的视角介绍如何一步步设计出一个简易版的 SSL/TLS 的过程,在文章的最后,再简单介绍 TLS 1.2 版本的工作机制,以此帮助大家对 SSL/TLS 协议的基本原理有一个更深入 ...
- Kibana-CentOS7单机安装测试
一.是什么 Kibana 是为 Elasticsearch设计的开源分析和可视化平台.你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互.你可以很容易实现 ...