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

我定义一个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. Java中的String,StringBuilder,StringBuffer三者的区别

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  2. SSM实战

    http://www.07net01.com/2016/07/1607717.html https://github.com/Lutils/MyForum

  3. form submit提交

    form内控件参数自动添加到url后,而自定义的url参数则不能添加到url后 $('#fm').form('submit', { url: 'Data/Diary.ashx?dt=' + new D ...

  4. 如何在Linux上编译c++文件

    1. 打开Linux客户端,新建一个c++文件 2. 写如下代码,退出保存 3.对.cpp文件进行编译并输出结果.

  5. Comparators.sort (转载)

    Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f, ...

  6. 【集合框架】JDK1.8源码分析之HashMap(一) 转载

    [集合框架]JDK1.8源码分析之HashMap(一)   一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化 ...

  7. 未能加载 global.asax的类的解决方案

    “/suitecallback”应用程序中的服务器错误. 分析器错误 说明: 在分析向此请求提供服务所需资源时出错.请检查下列特定分析错误详细信息并适当地修改源文件. 分析器错误消息: 未能加载类型“ ...

  8. CSS 常用的命名规则

    (1)页面结构 容器: container 页头:header 内容:content/container 页面主体:main 页尾:footer 导航:nav 侧栏:sidebar 栏目:column ...

  9. MongoDB 复制(副本集)

    MongoDB复制是将数据同步在多个服务器的过程. 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性. 复制还允许您从硬件故障和服务中断中恢复数据. ...

  10. Docker Hub

    目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了超过 15,000 的镜像.大部分需求,都可以通过在 Docker Hub 中直接下载镜像来实现. 登录 可以通过执行 ...