黑马程序员——Java基础——泛型
来源:互联网 发布:海南环岛高铁停运 知乎 编辑:程序博客网 时间:2024/04/30 05:56
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
泛型是JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制。
好处:1、将运行时期出现的问题转移到编译时期,方便于程序员解决问 题,让运行事情问题减少,安全。
2、避免了强制转换麻烦。
格式:通过< >来定义要操作的引用数据类型。在集合框架很常见。
如下面:
import java.util.*;public class FanXingTest { public static void main(String[] args){ ArrayList<Integer> al=new ArrayList<Integer>(); al.add(12); al.add(15); al.add(20); Iterator it=al.iterator(); while(it.hasNext()){ System.out.println(it.next()); } }}
泛型类:当类中要操作的引用数据类型不确定的时候。
泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
为了让不同方法可以操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上。
import java.util.*;public class FanXingTest4 { public static void main(String[] args){ Methoc<Integer> m=new Methoc<Integer>(); m.show(123); //m.show("asdf"); //这里是错误的,因为show可以传递的参数类型已经固定了,只能是整形 m.print("asdf"); //print方法上定义了泛型,所以它不爱限制 m.say("bbb"); }}class Methoc<AA>{ public void show(AA q){ System.out.println(q); } public <QQ> void print(QQ q){ System.out.println(q); } public static <BB> void say(BB b){ //say方法是静态的,所以它不可以访问类上定义的泛型,必须将泛型定义在方法上 System.out.println(b); }}
泛型也可以定义在接口上。
如:
import java.util.*;public class FanXingTest5 { public static void main(String[] args){ Test1 t=new Test1(); t.say("ads"); //t.say(123); //错误,只能传递String 类型 }}interface jiekou<QQ>{ public void say(QQ q);}class Test1 implements jiekou<String>{ public void say(String q){ System.out.println(q); }}
但如果类操作的类型也不确定,可以这样:
import java.util.*;public class FanXingTest5 { public static void main(String[] args){ Test1<Integer> t=new Test1<Integer>(); t.say(123); }}interface jiekou<QQ>{ public void say(QQ q);}class Test1 <QQ> implements jiekou<QQ>{ public void say(QQ q){ System.out.println(q); }}
泛型限定:
? extends E 泛型可以接收E,也可以接收E的子类型;
? super T 泛型可以接收T,也可以接收T的父类型。
import java.util.*;public class TongPeiFu2 { public static void main(String[] args){ ArrayList<Persona> a=new ArrayList<Persona>(); a.add(new Persona("ads",23)); a.add(new Persona("sss",11)); a.add(new Persona("oui",62)); ArrayList<Studenta> a2=new ArrayList<Studenta>(); a2.add(new Studenta("人有有",23)); a2.add(new Studenta("小丽",11)); a2.add(new Studenta("方方",62)); show(a); show(a2); } public static void show(ArrayList<? extends Persona> a){ Iterator it=a.iterator(); while(it.hasNext()){ System.out.println(it.next()); } }}class Persona{ String name; int age; Persona(String name, int age){ this.name=name; this.age=age; } public String toString(){ return this.name; }}class Studenta extends Persona{ Studenta(String name,int age){ super(name,age); }}
0 0
- 黑马程序员—JAVA基础
- 黑马程序员—Java基础
- 黑马程序员:Java基础——泛型
- 黑马程序员——JAVA基础---泛型
- 黑马程序员——Java基础---泛型
- 黑马程序员——Java基础---泛型
- 黑马程序员 Java基础——泛型
- 黑马程序员—Java基础:初识Java
- 黑马程序员——java编程基础
- 黑马程序员——Java编程基础
- 黑马程序员——java编程基础
- 黑马程序员——JAVA基础编程
- 黑马程序员——java基础
- 黑马程序员——java基础概述
- 黑马程序员——java基础小结
- 黑马程序员——java编程基础
- 黑马程序员——Java基础
- 黑马程序员——Java基础---多线程
- 删除Ubuntu多余的开机启动项(旧的内核)
- 餐饮美食菜品推荐数据表
- 15第十六周项目一——平方根的异常
- 三元运算符
- Android 官方推荐 : DialogFragment 创建对话框
- 黑马程序员——Java基础——泛型
- 安卓TV开发(十) 智能电视开发之在线视频直播
- Netlink创建的RTM_NEWROUTE消息
- arm-linux-gcc-4.3.2安装步骤
- opencv中的形参
- 顺序列表记单词工具Android实现
- git 远程协作的主要命令
- BZOJ 4128 Matrix Baby-Step-Giant-Step+矩阵求逆
- Coursera-Machine Learning 笔记(二)Linear Regression with multiple variables