zoukankan      html  css  js  c++  java
  • 《java入门第一季》之泛型类引入

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

    我定义一个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类型的的
    	}
    }


    解决了编译时期就能判别类型错误的情形。



  • 相关阅读:
    web网页测试用例(非常实用)
    怎么做web接口测试
    我的周记13——”离开,是为了更好的回来"
    Lambda 表达式常用函数
    IEnumberable<T>接口
    Linq的学习
    未能加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。
    拉姆达表达式的笔记
    注册今日头条
    爬取百思不得姐的段子
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299746.html
Copyright © 2011-2022 走看看