首先用一个例子引入泛型类。

我定义一个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入门第一季》之泛型类引入的更多相关文章

  1. JAVA入门第一季(mooc-笔记)

    笔记相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第一季 ...

  2. Java入门第一季——从此投身Java??

    找工作告一段落. 最后的工作呢,和java紧密相关,也是阴差阳错,不过都是软件开发,都好了,不过以后侧重点肯定是在java这边,php有机会还是一直学下去的,那么美的说~ Java开发第一季  一.简 ...

  3. Java入门第一季

    慕课网:http://www.imooc.com/learn/85 Java入门知识第一季 1.Java开发环境和IDE的使用: 2.变量和常量 3.常用的运算符 4.流程控制语句 5.数组:使用Ar ...

  4. 《java入门第一季》之Arrays类前传(排序案例以二分查找注意的问题)

    根据排序算法,可以解决一些小案例.举例如下: /* * 把字符串中的字符进行排序. * 举例:"dacgebf" * 结果:"abcdefg" * * 分析: ...

  5. 《java入门第一季》之面向对象(谈谈接口)

    软件中有接口,这里的接口与硬件中的接口还是有很大区别的. 这里介绍接口不考虑JDK8的新特性(JDK8开始接口里面可以有非抽象方法了,介绍JDK8新特性可能要到整个第一季写完吧!) 还是直接进入接口的 ...

  6. 《java入门第一季》之泛型引入

    泛型的引入: 首先看一段代码体会自动报错. // 看下面这个代码 自动报错 String[] strArray = new String[3]; strArray[0] = "hello&q ...

  7. 《java入门第一季》集合框架引入与面试题

    注:在开始的几篇集合介绍里,不包含泛型的概念.泛型在讲述所有集合后再加入进去. 集合的由来:    我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我 ...

  8. Java入门第一季学习总结

    一.课程总概 这门课程的学习难度属于入门级别,又由于有c++的基础,所以学习这门课程也是比较轻松的.可以简单地把这门课的学习分为四部分:第一部分,java的介绍(第一章):第二部分,java的数据类型 ...

  9. 慕课网-Java入门第一季-7-4 编程练习

    来源:http://www.imooc.com/code/1634 小伙伴们,请根据所学知识,参考注释,在代码编辑器中将代码补充完整.编写一个 Java 程序,实现输出学生年龄的最大值 要求: 1. ...

随机推荐

  1. 解决Spring Boot 使用RedisTemplate 存储键值出现乱码 \xac\xed\x00\x05t\x00

    spring-data-redis的RedisTemplate<K, V>模板类在操作redis时默认使用JdkSerializationRedisSerializer来进行序列化解决方法 ...

  2. Oracle 11g 中SQL性能优化新特性之SQL性能分析器(SQLPA)

    Oracle11g中,真实应用测试选项(the Real Application Testing Option)提供了一个有用的特点,叫SQL性能分析器(SQL Performance Analyze ...

  3. Python中strip()、lstrip()、rstrip()用法详解

    Python中有三个去除头尾字符.空白符的函数,它们依次为: strip: 用来去除头尾字符.空白符(包括\n.\r.\t.' ',即:换行.回车.制表符.空格)lstrip:用来去除开头字符.空白符 ...

  4. 不能执行已经释放掉的Script代码!(已解决)

    发生原因: 当页面关闭时 会释放掉该页面的JS 解决方法: 在 js onload方法中执行容错判断, 如果该JS文件中任意对象为空的话,则动态加载该JS文件. window.onload = fun ...

  5. AnyConnect使用说明(电脑版Windows)

    一.下载客户端 Anyconnect支持Windows.Mac电脑. 二.安装 1.双击打开下载的文件,点“Next”开始安装. 2.选择“I accept …”,再点下一步. 3.点“Install ...

  6. Docker 联合文件系统

    联合文件系统(UnionFS)是一种分层.轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several dir ...

  7. OWASP Top 10十大风险 – 10个最重大的Web应用风险与攻防

    先来看几个出现安全问题的例子 OWASP TOP10 开发为什么要知道OWASP TOP10 TOP1-注入 TOP1-注入的示例 TOP1-注入的防范 TOP1-使用ESAPI(https://gi ...

  8. pandas小记:pandas高级功能

    http://blog.csdn.net/pipisorry/article/details/53486777 pandas高级功能:面板数据.字符串方法.分类.可视化. 面板数据 {pandas数据 ...

  9. JDK、JRE和JVM的关系

    JDK中包含了JRE,JRE中包含了JVM. 详解: JDK是JAVA的核心,包括JRE(JAVA 虚拟环境).编译器等,JDK的主流产品是由SUN公司开发的,JDK本身是用JAVA编写的,安装包的S ...

  10. 自定义支持多行显示的RadioGroup

    自定义支持多行显示的RadioGroup 原生的RadioGroup继承自LinearLayout,即只能支持一横排或者一竖排的排列显示RadioButton 现在改写RadioGroup,使它支持多 ...