Java SE菜鸟之泛型
1泛型引入目的:
解决对于两个或多个对象的所有逻辑都一样,只有对象中的某些成员变量的类型不一样
例如:一个类Person成员变量(String name,int age),这时候你想创建一个对象person1(String name,int age)和person2(String name,String age)//(仅仅age的类型不同),
(三种方法)
1.你可以创建多个Person类(导致类的膨胀,重用性差)
2.你可以将类Person的age类型设为Object 类型。这个方法其实不错,但是在你在实例化对象Person person=new Person; person.age=18;,之后你(String)person.age强转的时候编译通过,但在运行的时候出错(安全性问题)
3.你可以引入泛型Person<T>成员变量(String name,T age)//T就是泛型,这时候你在实例化的时候就可以 Person<Integer> person1 = new Person<Integer>();。这时候(T=Integer),即person1.age 的类型就是Integer类型,Person<String> person2 = new Person<String>();的类型person1.age的类型是String类型。这时你强转的时候,编译的时候就不让通,过解决了2的问题。
2基本用法:
class Person<T>{
String name;
T age;
public void printIfo(){
System.out.println(name + age);
}
}
public class GenClassDemo {
public static void main(String[] args) {
Person<Integer> person1 = new Person<Integer>();
person1.age=18;
person1.name ="小明";
person1.printIfo();
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>");
Person<String> person2 = new Person<String>();
person2.age="18岁";
person2.name ="小明";
person2.printIfo();
}
}
3泛型的特点:
泛型的类型参数可以是泛型类
例:(人)Person<T>(T t,String name)和(枪)Gun<T>(T name)
Person<Gun<String>> person = new Person<Gun<String>> ();
可以理解为Person<T>属性T是Gun;Gun<T>的T是String。
同时设定多个类型参数
例:Person<K,T...>(K name,T age...)
Person<String,Integer> person;
即K是String,T是Integer,name是String类型,age是Integer类型
泛型的继承
例:(人)Person<T>(T name) (老师)Teacher<K,V>(K name,V other)
class Teacher<K,V> extends Person<T>
在<>中的位置对应Teacher的K 继承Person的T; V是你想要扩展属性
泛型类可以实现泛型接口
Interface Print<T>{
void show(T t);
T get();
}
限制可用类型
父类(武器)Weapon
子类(枪)Gun(刀)Knife(盾)Shield
Person<? extend Weapon>
意思是?是继承Weapon的类型
这时候Person<T> T只能是Weapon、Gun、Knife和Shield,其他类型都不行
Person<? super Gun>
这时候Person<T> T只能是Gun、Weapon即其父类,其他类型都不行
Java SE菜鸟之泛型相关推荐
- Java SE菜鸟之异常
Java SE菜鸟之异常 1异常引入: 程序在运行过程发生不正常的事件,Java中有异常封装类封装了异常信息.如果不处理异常的话程序崩溃中断,处理这些异常便可以使程序继续运行下去 异常分类: 受 ...
- 《java基础》-胖菜鸟说泛型
先扯两句 转眼之间距离上次发类.抽象类.接口已经过去了不知道多少个日夜了,原以为在博客中已经暗示的不能再明显了.可结果呢,几篇博客发出去了,别说找女朋友了,就连赞都没得到几个,在孤寂的夜自己的眼泪 ...
- Java SE进阶知识
一.集合 不管使用什么语言编程,编程在做的事情(编程的本质)都是一样的,那就是设计算法和数据结构(程序 = 算法 + 数据结构),算法是一个程序的操作步骤(即这个进程在CPU上的计算和执行顺序),数据 ...
- 零基础学JAVA]Java SE基础部分-01. Java发展及JDK配置
1.课程名称:Java发展及JDK配置 本季介绍了JAVA的发展过程,包括JDK的发展历程,path路径的配置和classpath的配置及作用.并简单讲解了一个简单的JAVA程序,并通过此程序讲解了J ...
- Java笔记14:泛型初探
一.泛型简介 泛型是从Java SE 1.5开始出现的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛 ...
- 面试必会系列 - 1.1 Java SE 基础
本文已收录至 github,完整图文:https://github.com/HanquanHq/MD-Notes Java SE 基础 面向对象 Java 按值调用还是引用调用? 按值调用指方法接收调 ...
- Java SE 11:推动Java向前发展
介绍 在我看来,这篇文章提出了Java语言应该如何发展以保持其作为首选语言的地位. 它还提供了一些我喜欢但有时(可能永远不会)成为Java一部分的功能,由于我将要解释的某些原因,这些功能有时我已经爱上 ...
- Java Se相关测试题(偏线程、集合)含答案及详解
Java Se相关测试题(偏线程.集合)(简答.编程)含答案及详解 一.选择.简答题 二.编程题 (编程答案有很多思路,实现方式不同,如果有不同见解可打在评论区或私信) 一.选择.简答题 1.publ ...
- [零基础学JAVA]Java SE应用部分-35.JAVA类集之二
JAVA按以下重要顺序 · 面向对象 · 类集框架 · JDBC · 文件编程 本季目标 主要讲解以下的内容: · Collection · List · Set · Map · Iterator · ...
最新文章
- 洛谷P1006 传纸条 (棋盘dp)
- Data Protection Manager 2010 系列之安装部署
- python同步异步_python中Tornado的同步与异步I/O的介绍(附示例)
- [XA]转:一个关于结对编程(Pair Programming)的讲义
- oracle 分割取值,oracle中的分割函数(split效果)
- axios拦截器的实现
- 使用WebBenchmark对webapi进行管理和性能测试
- html隐藏块元素过度动画,CSS3实现DIV图层隐藏到显示的过渡效果
- webpack 保存文件后自动打包_继webpack后又一打包神器Parcel
- 赋值运算符(AssignmentOperator)
- L2-018. 多项式A除以B -PAT团体程序设计天梯赛GPLT
- ubuntu中wine的安装位置
- 通过源码理解反射与注解是什么东西?
- map slice综合示例 go语言
- 开发者论坛一周精粹(第六十三期) WHM自动脚本修复ssh问题
- 【Android -- 学习】学习资料汇总
- windows下IOS证书制作,IOS证书在线制作
- 我的世界 Unity3D MineCraft 用Unity3D制作类似MineCraft我的世界的游戏 洞穴算是完成了
- 使用python统计excel两文件数据,excel公式为countif
- CallBack函数调用