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 ===================================== ...
随机推荐
- Atcoder 229
Atcoder 229 \(D.\)Longest X 题意 给定一个长度为\(N\)的字符串\(S\),\(S\)中包含$\ .\ \(和\)\ X\ \(两种字符,现在你可以将其中\)K\(个\) ...
- 释放linux内存中的cache缓存
echo 3 > /proc/sys/vm/drop_caches 记一次 经常用 exp 导出oracle全量数据库,发现linux内存一直在减小没有释放,即使 oracle重启也不行,只有 ...
- 通过对比语法差异,让会JAVA的你快速学会Kotlin的开源宝藏项目
今天有个小伙伴来问TJ君,说自己JAVA用的贼溜,想再学习下Kotlin,问TJ君上手难不难? 怎么说呢?其实TJ君一直觉得语言这方面,是触类旁通.一通百通的,既然JAVA已经贼溜了,想必学其他的语言 ...
- Qt:QMap
0.说明 QMap < Key , T > 一个QMap就是一个K-V对,也可以说是字典对象. 1)构造 构造一个Key是QString,Value是int的QMap: QMap<Q ...
- (第一章第四部分)TensorFlow框架之张量
系列博客链接: (一)TensorFlow框架介绍:https://www.cnblogs.com/kongweisi/p/11038395.html (二)TensorFlow框架之图与Tensor ...
- List、Set、Map有什么异同(详解)
引言:Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中 Java集合框架(常用接口): Collection 接口存储一组不唯一,无序的对象(父类接口 ...
- PHP之cURL(爬虫)
public static function SendDataByCurl($url,$data=array()){ //对空格进行转义 $url = str_replace(' ','+',$url ...
- 实现同比、环比计算的N种姿势
在做数据分析时,我们会经常听到同比.环比同比的概念.各个企业和组织在发布统计数据时,通常喜欢用同比.环比来和之前的历史数据进行比较,用来说明数据的变化情况.例如,统计局公布2022年1月份CPI同比增 ...
- think php 验证器及验证场景的使用
1:在需要验证的模块名下建一个validate文件夹 ,文件夹下建议个验证的 名称 Goods.php 2:打开Goods.php <?php namespace app\api\valid ...
- docker学习(四) - docker构建redis主从结构
此文章假设你已经安装了docker,如果没有安装请查询本博客docker安装章节 容器网络 docker network ls 查看默认的网络 Docker安装后,默认会创建下面三种网络类型 在启动 ...