无线&移动互联网技术研发

换位思考·····
posts - 19, comments - 53, trackbacks - 0, articles - 283
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

关于泛型

Posted on 2009-07-12 12:13 Gavin.lee 阅读(214) 评论(0)  编辑  收藏 所属分类: 类的设计

import  java.util.ArrayList;
import  java.util.List;

class  Fan  {
    
private  String name;

    
public   void  setName(String name)  {
        
this .name  =  name;
    }


    
public  String getName()  {
        
return  name;
    }

}


public   class  FanTest  {
    
public   static   void  main(String[] args)  {
        
//  /用泛型的效果--list的get方法取出来的对象不需要强制转换
        Fan fan1  =   new  Fan();
        fan1.setName(
" fanTest1 " );
        Fan fan2 
=   new  Fan();
        fan2.setName(
" fanTest2 " );

        List
< Fan >  list  =   new  ArrayList();
        list.add(fan1);
        list.add(fan2);

        System.out.println(list.get(
0 ).getName());
        System.out.println(list.get(
1 ).getName());

        
//  /不用泛型的效果--list的get方法取出来的对象需要强制转换
        List no_list  =   new  ArrayList();
        no_list.add(fan1);
        no_list.add(fan2);

        System.out.println(((Fan) list.get(
0 )).getName());
        System.out.println(((Fan) list.get(
1 )).getName());

    }

}

首先给一个我在CSDN里查到的我们常用的例子,这个基本上天天都会用,但是从来没仔细的考虑过中间的含义,惭愧。

规则和限制
  1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
  2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
  3、泛型的类型参数可以有多个。
  4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上称为“有界类型”。
  5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(java.lang.String);


package  com.Gavin.fanxing;

public   class  GenDemo  {
    
public   static   void  main(String[] args)  {
        
//  定义泛型类Gen的一个Integer版本
        Gen < Integer >  intOb  =   new  Gen < Integer > ( 88 );
        intOb.showTyep();
        
int  i  =  intOb.getOb();
        System.out.println(
" value=  "   +  i);
        System.out.println(
" ---------------------------------- " );
        
//  定义泛型类Gen的一个String版本
        Gen < String >  strOb  =   new  Gen < String > ( " Hello Gen! " );
        strOb.showTyep();
        String s 
=  strOb.getOb();
        System.out.println(
" value=  "   +  s);
    }

}


class  Gen < T >   {
    
private  T ob;  //  定义泛型成员变量

    
public  Gen(T ob)  {
        
this .ob  =  ob;
    }


    
public  T getOb()  {
        
return  ob;
    }


    
public   void  setOb(T ob)  {
        
this .ob  =  ob;
    }


    
public   void  showTyep()  {
        System.out.println(
" T的实际类型是:  "   +  ob.getClass().getName());
    }

}


package  com.Gavin.fanxing;

class  Gen2  {
    
private  Object ob;  //  定义一个通用类型成员

    
public  Gen2(Object ob)  {
        
this .ob  =  ob;
    }


    
public  Object getOb()  {
        
return  ob;
    }


    
public   void  setOb(Object ob)  {
        
this .ob  =  ob;
    }


    
public   void  showTyep()  {
        System.out.println(
" T的实际类型是:  "   +  ob.getClass().getName());
    }

}


public   class  NoGenDemo  {
    
public   static   void  main(String[] args)  {
        
//  定义类Gen2的一个Integer版本
        Gen2 intOb  =   new  Gen2( new  Integer( 88 ));
        intOb.showTyep();
        
int  i  =  (Integer) intOb.getOb();
        System.out.println(
" value=  "   +  i);
        System.out.println(
" ---------------------------------- " );
        
//  定义类Gen2的一个String版本
        Gen2 strOb  =   new  Gen2( " Hello Gen! " );
        strOb.showTyep();
        String s 
=  (String) strOb.getOb();
        System.out.println(
" value=  "   +  s);
    }

}


只有注册用户登录后才能发表评论。


网站导航: