《java入门第一季》之泛型类引入
2016-05-26 22:58
363 查看
首先用一个例子引入泛型类。
我定义一个Object类:
分析两行代码
明显向下转型有问题,而编译前并没有报错。因此,要洗那个办法解决这个问题。那么,泛型类站了出来。。。
代码修改如下:
自定义的类:
package cn.itcast_04;
/*
* 泛型类:把泛型定义在(类上)格式:public class 类名<泛型类型1,…>
*/
public class ObjectTool<T> {
private T obj;
public T getObj() {
return obj;//返回new String("林青霞");或者 new Integer(27);
}
public void setObj(T obj) {//T(String) obj = new String("林青霞");或者T(Integer) obj = new Integer(27);
this.obj = obj;
}
}ObjectToolDemo类的代码:
public class ObjectToolDemo {
public static void main(String[] args) {
ObjectTool<String> ot = new ObjectTool<String>();//给T指定了为String类型。
//ot.setObj(new Integer(27)); //这个时候编译期间就过不去
ot.setObj(new String("林青霞"));
String s = ot.getObj();//String s = new String("林青霞");输出:林青霞
System.out.println("姓名是:" + s);
ObjectTool<Integer> ot2 = new ObjectTool<Integer>();//要想使用Integer,再创建一个对象给T指定了为Integer类型
//ot2.setObj(new String("风清扬"));//这个时候编译期间就过不去
ot2.setObj(new Integer(27));
Integer i = ot2.getObj();//Integer i = new Integer(27)
System.out.println("年龄是:" + i);//i是Integer类型的的
}
}
解决了编译时期就能判别类型错误的情形。
我定义一个Object类:
package cn.it_03; public class ObjectTool { private Object obj; public Object getObj() { return obj;//obj = new Integer(30); obj = new String("林青霞"); } public void setObj(Object obj) { // Object obj = new Integer(30); 或者Object obj = new String("林青霞"); this.obj = obj;//由于接收的是object类型,所以可以接收任意类型 } }然后在另一个类里面使用上边那个类的元素,如下:
package cn.itcast_03; /* * 早期的时候,我们使用Object来代表任意的类型。 * 向上转型是没有任何问题的,但是在向下转型的时候其实隐含了类型转换的问题。 * 也就是说这样的程序其实并不是安全的。所以Java在JDK5后引入了泛型,提高程序的安全性。 */ public class ObjectToolDemo { public static void main(String[] args) { ObjectTool ot = new ObjectTool(); // 正常使用 ot.setObj(new Integer(27)); Integer i = (Integer) ot.getObj();//向下转型:Integer i = new Integer(30); System.out.println("年龄是:" + i);//i=30 ot.setObj(new String("林青霞")); String s = (String) ot.getObj();//向下转型String s = new String("林青霞"); System.out.println("姓名是:" + s);//s=林青霞 //非正常使用 System.out.println("---------以上时没有问题的"); ot.setObj(new Integer(30)); // // ClassCastException String ss = (String) ot.getObj();//Integer类型转不到String类型String ss =new Integer(30)显然时错误的。 // new Integer(30);显然不正确 // System.out.println("姓名是:" + ss); } }
分析两行代码
ot.setObj(new Integer(30)); String ss = (String) ot.getObj();
明显向下转型有问题,而编译前并没有报错。因此,要洗那个办法解决这个问题。那么,泛型类站了出来。。。
代码修改如下:
自定义的类:
package cn.itcast_04;
/*
* 泛型类:把泛型定义在(类上)格式:public class 类名<泛型类型1,…>
*/
public class ObjectTool<T> {
private T obj;
public T getObj() {
return obj;//返回new String("林青霞");或者 new Integer(27);
}
public void setObj(T obj) {//T(String) obj = new String("林青霞");或者T(Integer) obj = new Integer(27);
this.obj = obj;
}
}ObjectToolDemo类的代码:
public class ObjectToolDemo {
public static void main(String[] args) {
ObjectTool<String> ot = new ObjectTool<String>();//给T指定了为String类型。
//ot.setObj(new Integer(27)); //这个时候编译期间就过不去
ot.setObj(new String("林青霞"));
String s = ot.getObj();//String s = new String("林青霞");输出:林青霞
System.out.println("姓名是:" + s);
ObjectTool<Integer> ot2 = new ObjectTool<Integer>();//要想使用Integer,再创建一个对象给T指定了为Integer类型
//ot2.setObj(new String("风清扬"));//这个时候编译期间就过不去
ot2.setObj(new Integer(27));
Integer i = ot2.getObj();//Integer i = new Integer(27)
System.out.println("年龄是:" + i);//i是Integer类型的的
}
}
解决了编译时期就能判别类型错误的情形。
相关文章推荐
- 《java入门第一季》之泛型类引入
- 计蒜客之矩阵翻转
- [原创]java WEB学习笔记22:MVC案例完整实践(part 3)---多个请求对应一个Servlet解析
- Eclipse上安装GIT插件EGit及使用
- java中读取properties文件
- java反射——基础
- Java基础:参数传递(三)
- windows下安装jdk及配置环境变量
- 《java入门第一季》之根据小案例体会泛型
- 《java入门第一季》之根据小案例体会泛型
- Java基础:参数传递(二)
- Java之------单机版书店管理系统(设计思想和设计模式系列一)概述
- Java基础:参数传递(一)
- Java之环境
- Java基础-精确浮点:strictfp(strict float point)
- 《java入门第一季》之泛型引入
- 《java入门第一季》之泛型引入
- JAVA反射机制
- Spring mybatis Access denied for user 'root'@'localhost' (using password:YES)
- Spring MVC 教程,快速入门,深入分析