A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© SenGoo 中级黑马   /  2014-10-20 17:04  /  878 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

泛型是为了统一存入数据的类型额特别设计的新特性
好处:将运行时期的问题ClassCastException转到了编译时期。
          避免了强制转换的麻烦。
运行时,回去掉泛型,生产的class文件中是不带泛型的,称为泛型的擦除
-----------------------------------------------------------------------------------------------------
泛型可用在类,方法,静态方法,接口上
-----------------------------------------------------------------------------------------------------
泛型的基本使用
import java.util.*;
publicclass GenericDefineDemo4{
        publicstaticvoid main(String[] args){
                ArrayList<String> arr=new ArrayList<String>();//定义一个ArrayList,只允许存入String类型的元素

                arr.add("java01");
                arr.add("java02");
                arr.add("java03");
                arr.add("java04");

                Iterator<String> it=arr.iterator();//利用迭代器取出所所有元素
                while(it.hasNext()){
                System.out.println(it.next());
        }
        }
}
-----------------------------------------------------------------------------------------------------
泛型类:格式:class ClassName<datatype>
                            {
                            }
                   优点:便于对任何未知的的数据类型进行操作,
                                   特别适合用作工具类,避免了强制类型转换的麻烦。
泛型类示例:import java.util.*;
                                public class GenericClass{
                                        public static void main(String[] args){
                                                Tools<String> tools=new Tools<String>("hello");//创建一个类,制定存入的数据类型为String
                                                System.out.println(tools.getObj());
                                                }
                                        }

                                                class Tools<T>{//定义一个泛型类,不指定存入的具体类型,用 T 代替
                                                        private T obj;
                                                        public Tools(T t){ //构造方法
                                                                this.obj=t;
                                                }

                                                public T getObj() {//定义get方法,返回值为T
                                                        return obj;
                                                }
                                                publicvoid setObj(T obj) {
                                                        this.obj = obj;
                                                }
                                }
-----------------------------------------------------------------------------------------------------
泛型方法:当只需要某一个方法可以接收不同类型的参数,
                         而不是整个类的时候,就可以用到泛型方法,
                         它将大大提高程序代码的扩展性。
泛型方法示例:import java.util.*;
                                        publicclass GenericMethod{
                                                publicstaticvoid main(String[] args){
                                                        String s="hello!Nice to meet you!";//定义String类型参数
                                                        Integer inter=3;//定义Integer类型参数
                                                        Show show=new Show();//创建一个带泛型方法的类
                                                        show.print(s);//调用类中的泛型方法,输出String类型的数据
                                                        show.print(inter);//调用类中的泛型方法,输出Interge类型的额数据
                                                }
                                        }
                                                class  Show{
                                                        public  <Q> void print(Q q){//将放行定义在方法上,不指定具体类型
                                                                System.out.println(q);
                                                }
                                        }
-----------------------------------------------------------------------------------------------------
静态泛型方法:格式:public static <T> methodName(T param)
                                           {
                                           }
                                        特点:由于静态方法不可以访问类中的泛型,
                                                        如果静态方法操作的类型不确定,这可以把泛型定义在静态方法上。
示例:public static <Q> void print(Q q)//类似于泛型方法
           {
                  System.out.println(q);
          }
--------------------------------------------------------------------------------------------------------------------------------------
泛型接口:当接口要操作的数据类型不确定的时候,就可以使用泛型接口。
                   注意:当实现接口的类已经确定了接口具体的类型时,
                                         创建对象时就不用再指明类型了,
                                        如:class InterImpl implements Inter<String>{//Inter已经明确了泛型类型
                                                  }
                                  如果实现类仍不知道具体的类型,就要创建对象时指明,
                                        如:class InterImpl<T> implements Inter<T>{//没有明确泛型
                                          }
                                          InterImpl<String> im=new InterImpl<String>();
泛型接口实例:import java.util.*;
                                   public class Test{
                                                public static void main(String[] args){
                                                        InterImpl<String> im=new InterImpl<String>();//指定要传入的类型参数
                                                        im.print("hello");
                                                        }
                                                }
                                                        interface Inter<T>{        //接口未明确泛型类型
                                                                void print(T t);
                                                        }
                                                        class InterImpl<T> implements Inter<T>{//实现未确定泛型类型的接口
                                                                public void print(T s){
                                                                        System.out.println(s);
                                                        }
                                   }
                                  
-----------------------------------------------------------------------------------------------------
泛型限定:? extends E:接收E类型或者E的子类型对象。上限
                                                        一般存储对象的时候用。比如添加元素 addAll.
                   ? super E:接收E类型或者E的父类型对象。下限。
                                                  一般取出对象的时候用。比如比较器。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马