Java基础泛型总结
【摘要】
前言: 在阅读博客之前请大家思考下面这几个问题 1 什么是泛型? 2 泛型的好处? 3 为什么要使用发型
这三个问题大家先思考几分钟,然后在继续阅读下面的博客内容。我将在下面逐个进行介绍,如果大家有其他...
前言:
在阅读博客之前请大家思考下面这几个问题
1 什么是泛型?
2 泛型的好处?
3 为什么要使用发型
这三个问题大家先思考几分钟,然后在继续阅读下面的博客内容。我将在下面逐个进行介绍,如果大家有其他看法或者说认为我的理解有些偏差,敬请大家指正 ;评论在 下面评论区
正文:
概念
1 什么是泛型?
概念
泛型是一种不确定的数据类型,可以根据用户的选择来创建具
体的数据类型。
类型的确定
泛型类
只有在创建对象的时候才能确定数据类型
泛型方法
只有方法被调用的时候才能确定数据类型
泛型接口
只有接口被实现的时候才能确定数据类型
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
2 泛型的好处?
1 类型安全
过知道使用泛型定义的变量的类型限制,编译器可以在非常高的
层次上验证类型假设。没有泛型,这些假设就只存在于系统开发
人员的头脑中。
2 避免类型转换错误
消除源代码中的许多强制类型转换。这使得代码更加可读,并且
减少了出错机会。
3 提高运行效率
在非泛型编程中,将筒单类型作为Object传递时会引起Boxing(装
箱)和Unboxing(拆箱)操作,这两个过程都是具有很大开销的。引入泛型后,
就不必进行Boxing和Unboxing操作了,所以运行效率相
对较高,特别在对集合操作非常频繁的系统中,这个特点带来的性能提升
更加明显。
4 潜在的性能收益
泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强
制类型转换(没有泛型的话,Java系统开发人员会指定这些强制
类型转换)插入生成的字节码中。但是更多类型信息可用于编译
器这一事实,为未来版本的JVM的优化带来可能。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
3 为什么要使用泛型
通过泛型可以定义类型安全的数据结构(类型安全),而无须使用实际的数据类型(可扩展)。这能够显著提高性能并得到更高质量的代码(高性能),因为您可以重用数据处理算法,而无须复制类型特定的代码(可重用)。
定义格式
泛型类
定义格式
修饰符 class 类名<代表泛型的变量> { }
- 1
- 2
泛型方法
定义格式
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
- 1
- 2
泛型接口
定义格式
修饰符 interface接口名<代表泛型的变量> { }
- 1
- 2
代码实现:
泛型类
泛型类
package com.itheima.demo03;
/*
* 定义一个含有泛型的类,模拟ArrayList集合
* 不确定数据类型可以使用泛型,可以接受任意数据类型
* 创建对象的时候确定泛型的数据类型
* */
public class Generic<E> {//含有泛型的类
E name;
public E getName() {
return name;
}
public void setName(E name) {
this.name = name;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
调用泛型类
package com.itheima.demo03;
import com.itheima.demo03.Generic;
public class Demo02GenericTest {
public static void main(String[] args) {
// 不写类型默认是object类型,返回也是object类型。
// Generic<int> gc=new Generic<int>();
// gc.setName("只能赋值字符串");
//使用泛型类,泛型类只有在创建对象的时候确定数据类型。
Generic<Integer> gc=new Generic<>();
gc.setName(1);
Integer name = gc.getName();
System.out.println(name);
//创建Generic的字符串对象
Generic<String> gc2=new Generic<>();
gc2.setName("xiao");
String name1 = gc2.getName();
System.out.println(name1);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
结果:
泛型方法
package com.itheima.demo03;
/*
* 创建泛型的方法
* 类型确定
* 只有 在调用方法的时候 才能确定数据类型。
* */
public class Demo03Funtionf {
public static void main(String[] args) {
//整数类型方法
Integer show = show(1);
System.out.println(show);
//字符串类型方法
String str = show("这是字符串类型");
System.out.println(str);
}
//使用泛型的方法
private static <E> E show(E s){
return s;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
结果:
泛型接口
泛型接口
package com.itheima.demo03;
/*
* 定义泛型接口
* 类型确定
* 只有在实现接口的时候确定,接口的类型。
* */
public interface InterfaceGeneric<E> {
E Show(E s);//显示数据
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
接口的实现类
package com.itheima.demo03;
/*
* 实现InterfaceGeneric接口的方法
* */
public class Genericsxian implements InterfaceGeneric<String> {
@Override
public String Show(String s) {
return s;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
调用实现类
package com.itheima.demo03;
public class Demo04 {
public static void main(String[] args) {
Genericsxian interFace=new Genericsxian();
String ksh = interFace.Show("ksh");
System.out.println(ksh);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
结果:
------------------------------------END------------------------------------------------
文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。
原文链接:kangshihang.blog.csdn.net/article/details/108200632
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)