Java基础之浅谈泛型
一、Java泛型
1.1为什么使用泛型
- 今天我们来了解一下泛型的优点与不足。
- 使用泛型,可以使我们不必在进行类型强制转换。
- 简化了我们的代码,但是我们需要考虑用哪一种类型才比较合适
- 让你的程序可读性更加,同时也更加的安全
1.2学会使用泛型
- Java中通常使用变量E表示集合元素类型,K和V分别表示键和值的类型。T表示"任意类型"。
- 这也是泛型入门的基础,学会如何使用泛型。
- 简单定义一个泛型的类
public class Test1<T> {
T age; //定义泛型变量,泛型T就相当于基本数据类型。
T first;
private T second;
public Test1(T age) {
this.age = age;
}
}
class B {
public static void main(String[] args) {
Test1<String> test1 = new Test1<>("13");//这里就体现了泛型的灵活性。我们可以传入任意的类型。
Test1<Integer> test2 = new Test1<>(15);
}
}
- 泛型方法
public <T> T Test2(T age) {
return age;
}
//我们可以传入任意类型的参数
1.3泛型的继承
- 如果我们要使用一个接口中的方法,那么我们可以利用泛型的继承来实现
public static <T extends Comparable> T Test3(T[] a){
//这样就继承了Comparable的方法
//但是这里的T只能使用 实现了Comparable接口的类。
}
- 你可能会好奇,Comparable不是接口吗,为什么要用extends?反正都是这么用的,记住得了。
- 我们可以使用"&"通配符继承多个
<T extends Comparable & List>
我们来讨论一个继承关系:
public class Father {
}
class Son extends Father {
public static void main(String[] args) {
ArrayList<Father> list1 = new ArrayList<>();
ArrayList<Son> list2 = list1;//这是错误的
//他们两个没有任何关系
}
}
1.4类型擦除
- 类型擦除就是将我们的Java代码,转换成普通代码。
- 转换成它的顶级父类。
- 了解吧
public class Test1<T> {
T age;
T first;
//擦除后变成
Object age;
Object first;
}
1.5静态与捕获异常
- 不能再静态字段或方法中引用类型变量。
public static T test();//Error
- 不能抛出或者捕获泛型类的实力
try{
}catch(T e){
//不可以O
}
二、通配符概念
- 在通配符类型中,允许类型参数发生变化。
Pair<? extends Employee>
表示任何泛型Pair类型,它的类型参数是Employee的子类,如Pair,但不是Pair。这个是继承方面的。 - 通配符的超类型限定:
<? super Manager>
表示为Manager的所有父类。 - 无限定通配符:
Pair<?>
- 额。。。。了解即可吧/(ㄒoㄒ)/~~
三、结尾
- 对于泛型内容就总结这么多,若想深入学习等待后续更新,基础部分掌握这些足矣。如果有不足之处,希望大家多多包涵,多多支持。如果有不懂的地方可以直接私信问我,欢迎来访!
- 我将会继续更新关于Java的学习知识,感兴趣的小伙伴可以关注一下。
- 文章写得比较走心,用了很长时间,绝对不是copy过来的!
- 尊重每一位学习知识的人,同时也尊重每一位分享知识的人。
- 你的点赞与关注,是我努力前行的无限动力。
Java基础之浅谈泛型的更多相关文章
- Java基础之浅谈接口
前言 前几篇文章我们已经把Java的封装.继承.多态学习完了,现在我们开始比较便于我们实际操作的学习,虽然它也是Java基础部分,但是其实入门容易,精通很难. 我认真的给大家整理了一下这些必须学会.了 ...
- Java基础之浅谈继承、多态
一.继承的理解 继承:简单通俗的来讲,继承就是一个类继承另一个类,通常用extends表示继承. 继承的类叫子类,被继承的类叫父类. 子类可以使用父类的变量和方法,同时也可以重写父类的方法. 在Jav ...
- Java基础之浅谈集合
Java基础知识.关于List.Set.Map接口的了解,以及ArrayList.LinkedList.HashSet.TreeSet.HashMap.TreeMap...
- java基础(十七)----- 浅谈Java中的深拷贝和浅拷贝 —— 面试必问
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...
- Java基础:浅谈数据输入流/数据输出流《DataInputstream类与DataOutputstream类》
一.理论概述 数据输入/输出流(DataInputStream类与DataOutputStream类) 允许应用程序以与机器无关的方式从底层输入流中读取基本Java数据类型. 说白了就是,当读取一个 ...
- Java基础之浅谈异常与了解断言
一.产生错误原因 用户输入错误 设备错误 物理限制 代码错误 二.解决错误---异常 在Java中异常对象都是派生于Throwable类的一个实例. 我们一般将异常分为两种:①Error和②Excep ...
- 【Java基础】浅谈常见设计模式
Num1:单例模式 基本概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 常见写法: 懒汉式 public class Singleton { /* 持有私有静态实例,防止被引用,此处赋值 ...
- 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变
在net中json序列化与反序列化 准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...
- Java基础之多态和泛型浅析
Java基础之多态和泛型浅析 一.前言: 楼主看了许多资料后,算是对多态和泛型有了一些浅显的理解,这里做一简单总结 二.什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面 ...
随机推荐
- CF877F题解
题目大意 有一个序列,每个位置上有 \(1\) 或 \(2\) 两种元素若干,每次询问一个区间,求这个区间有多少个子区间满足 \(1\) 类元素恰好比 \(2\) 类元素多 \(k\) 个. 莫队 要 ...
- 云原生入门 第五章:kubernetes学习实践
1. 简介 在本章中,我们将学习不同的Kubernetes对象,它们的用途以及如何与它们交互. 在设置集群或使用现有集群之后,我们可以开始部署一些工作负载.Kubernetes中最小的计算单元不是一个 ...
- 74CMS 3.0 SQL注入漏洞前台
一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...
- TCP/IP协议 | TCP协议 | UDP协议 | 三次握手四次挥手
TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP.SMTP.TCP.UDP.IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP ...
- 5分钟了解二叉树之LeetCode里的二叉树
有读者反馈,现在谁不是为了找工作才学的数据结构,确实很有道理,是我肤浅了.所以为了满足大家的需求,这里总结下LeetCode里的数据结构.对于我们这种职场老人来说,刷LeetCode会遇到个很尴尬的问 ...
- mybatis是如何分页的,分页插件的原理是什么
mybatis是如何分页的,分页插件的原理是什么 代码之尖关注 12018.12.28 17:11:12字数 529阅读 19,877 1. SQL 分页 <select id="qu ...
- 什么叫 CC 攻击?什么叫 DDOS 攻击?
CC 攻击,主要是用来攻击页面的,模拟多个用户不停的对你的页面进行访问,从而使你的系统资源消耗殆尽.DDOS 攻击,中文名叫分布式拒绝服务攻击,指借助服务器技术将多个计算机联合起来作为攻击平台,来对一 ...
- Canvas将图片转换成base64形式展示的常见问题及解决方案
导航1:https://blog.csdn.net/weixin_30668887/article/details/98822699 导航2:https://stackoverflow.com/que ...
- 描述一下 JVM 加载 class 文件的原理机制?
JVM 中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java 中的 类加载器是一个重要的 Java 运行时系统组件,它负责在运行时查找和装入类文件 中的类. 由于 Java 的 ...
- Linux下安装jdk-7u67-linux-x64.rpm
1.新建一个jdk的安装目录,我这里是在/usr/下新建了java目录,我是使用WinSCP创建的文件夹,把 jdk-7u80-linux-x64.tar.gz压缩包从本地Windows系统中拖到Li ...