泛型_小记
来源:互联网 发布:mysql 状态 编辑:程序博客网 时间:2024/06/08 13:24
使用ArrayList存储元素 * 给ArrayList集合存储了一些元素,String类型的元素,Integer类型的元素 * 但是通过迭代器遍历元素,由于,系统不知道集合中存储了哪些元素,所有使用String类型接收,就会出现ClassCastException:类转换异常 * 这样设计不够好! * 定义一个数组:字符串数组// String[] str = new String[3] ;// str[0] = "hello" ;// str[1] = "world" ;// str[2] = 100 ;
数组设计这样好处:提前告诉了开发者,这里只能装String类型的元素,Java根据数组特点—->引出:泛型
泛型:把数据类型的明确工作提供提前到了创建对象或者是调用方法的时期明确的一种特殊类型.参数化类型,可以像参数一样进行传递
格式:
<引用类型>:泛型只能放引用类型
泛型好处:
1)将运行时期异常提前到了编译时期
2)解决了黄色警告线问题
3)获取数据的时候,不用强制类型转换了
一般情况:泛型可以应用在接口,类,或者方法上;主要用在集合中比较多!
测试类:
package Day14_fanxing;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @author Aoman_Hao
*/
public class MainTest1 {
public static void main(String[] args) { ArrayList<Star> ARR = new ArrayList<Star>(); Star s1 = new Star("TZRRY",22,"女"); Star s2 = new Star("TZR",24,"女"); Star s3 = new Star("Aoman",25,"男"); Star s4 = new Star("TT",23,"男"); ARR.add(s1); ARR.add(s2); ARR.add(s3); ARR.add(s4); //使用迭代器遍历 Iterator<Star> it = ARR.iterator(); while(it.hasNext()){ Star s = it.next(); System.out.println(s.getName()+"\t"+s.getAge()+"\t"+s.getGender()); }}
}
对象类:
package Day14_fanxing;/** * @author Aoman_Hao */public class Star {private String name;private int age;private String gender;public Star() { super(); // TODO Auto-generated constructor stub}@Overridepublic boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Star other = (Star) obj; if (age != other.age) return false; if (gender == null) { if (other.gender != null) return false; } else if (!gender.equals(other.gender)) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true;}public String getName() { return name;}public void setName(String name) {}public int getAge() { return age;}public void setAge(int age) {}public String getGender() { return gender;}public void setGender(String gender) {}public Star(String name, int age, String gender) { super(); this.name = name; this.age = age; this.gender = gender;}}
泛型可以提供程序的安全性!
早期的时候,用Object类型代表任意的类型,向上转型是不会出现问题的,但是向下转型的时候,由于隐藏了类型转换,导致出现错误!JDK5以后,提供了泛型可以解决程序的安全性
泛型定义在类上
测试类package Day14_fanxing;/** * @author Aoman_Hao */public class ObjTest { public static void main(String[] args) { ObjectTool<String> s1 = new ObjectTool<>(); s1.setObj("TZRRY"); ObjectTool<Integer> i1 = new ObjectTool<>(); i1.setObj(22); System.out.println("姓名:"+s1+"\t"+"年龄"+i1); }}工具类:package Day14_fanxing;/** * @author Aoman_Hao */public class ObjectTool<T> {private T obj;public T getObj() { return obj;}public void setObj(T obj) {}public ObjectTool(T obj) { super(); this.obj = obj;}public ObjectTool() { super(); // TODO Auto-generated constructor stub}}
泛型定义在接口上
接口:public interface Inter<T> { public abstract void show(T t) ;}
//接口加入了泛型://第一种情况:接口的子实现类已经知道传递的是什么数据类型/*public class InterImpl<String> implements Inter<String> { @Override public void show(String t) { System.out.println(t); }}*///第二种情况:接口的子实现类在实现接口的时候,不知道具体的数据类型是什么//在测试类的时候,传入具体数据类型//面向接口编程//JavaEE:Sping框架 :AOP:面向切面编程public class InterImpl<T> implements Inter<T>{ @Override public void show(T t) { System.out.println(t); }}
//测试类public class InterDemo { public static void main(String[] args) { //创建接口对象 //第一种情况的测试 Inter<String> i = new InterImpl<String>() ; i.show("hello") ; System.out.println("-----------------------------"); //第二种情况: Inter<Integer> i2 = new InterImpl<Integer>() ; i2.show(27) ; Inter<String> i3 = new InterImpl<String>() ; i3.show("高圆圆") ; }}
一个专用书写,一个通用书写,具体看开发要求
阅读全文
0 0
- 泛型_小记
- 正则表达式_小记
- 集合_小记
- 链表_小记
- 数据流_小记
- 处理流_小记
- 多线程_小记
- Lock同步_小记
- struts2的简介_小记
- 等待唤醒机制_小记
- 多线程2_补充_小记
- (2011.11.12)汇编_王爽_全书_学习小记
- 哎呀,JSP小记_第一目
- Map集合_HashMap_TreeMap_等_小记
- 序列化反序列化流_属性集合类_小记
- LINUX下USB1.1设备学习小记(2)_协议
- LINUX下USB1.1设备学习小记(2)_协议
- LINUX下USB1.1设备学习小记(2)_协议
- TypeScript学习笔记
- iOS 摇一摇切换开发环境
- 在线音乐播放器(ajax请求网络中免费的api)
- spring 发送邮件功能示例
- 三位数转化为相反数与分离个十百位
- 泛型_小记
- java 线程间通信,多生产者多消费者问题
- 链表的插入、删除
- 一些常用的adb命令
- Linux内核学习记录1
- 1032. 挖掘机技术哪家强(20)
- Android中的Resources解析
- MFC窗口销毁过程
- Linux终端下 dstat 监控工具