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 ===================================== ...
随机推荐
- 学习Spring5必知必会(5)~Spring AOP
一.学习 AOP 思想的准备工作: 1.横切面关注点 在开发中,为了给业务方法中增加日志记录,权限检查,事务控制等功能,此时我们需要在修改业务方法内添加这些零散的功能代码(横切面关注点). 这些零散存 ...
- 开发并发布依赖包,作为工具包供别人npm install
1.初识包及 npm 包的概念: nodejs 中的第三方模块叫包 不同于 nodejs 中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用 nodejs 中的包都是免费开源 ...
- 设置vim永久显示编号
永久显示行号,需要我们设置配置文件,两种配置方式: 1. /etc/vimrc 是系统范围的初始化配置 2. -/.vimrc 个人的vim初始化配置 编辑配置文件,以个人为例: vi ...
- LeetCode-026-删除有序数组中的重复项
删除有序数组中的重复项 题目描述:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 ...
- CSS复合选择器,元素的显示模式,CSS背景设置
欢迎大家去博客冰山一树Sankey,浏览效果更好.直接右上角搜索该标题即可 博客园主页:博客园主页-冰山一树Sankey CSDN主页:CSDN主页-冰山一树Sankey 前端学习:学习地址:黑马程序 ...
- tp5 商品模型的添加展示
路由 //商品模型展示的路由 Route::get('type','/pyg/good/listType'); //将type_id传送至/pyg/good/addType的路由 Route::get ...
- tp5 全选,全不选 ,ajax批量删除
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- tensorflow源码解析之framework-device
目录 什么是设备 设备属性描述 device_base 关系图 涉及的文件 迭代记录 1. 什么是设备 "设备"是一个很容易引起混淆的概念,在TF中,设备device专指能够执行实 ...
- CSAPP shell Lab 详细解答
Shell Lab的任务为实现一个带有作业控制的简单Shell,需要对异常控制流特别是信号有比较好的理解才能完成.需要详细阅读CS:APP第八章异常控制流并理解所有例程. Slides下载:https ...
- 基于python 信用卡评分系统 的数据分析
基于python 信用卡评分系统 的数据分析 import pandas as pd import matplotlib.pyplot as plt #导入图像库 from sklearn.ensem ...