【2013-10-18】《Java编程思想》读书笔记:泛型 [历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2013-10-18 标题《Java编程思想》读书笔记泛型分类编程 / java / think_in_java 标签java·think in java·泛型《Java编程思想》读书笔记泛型简单泛型类简单泛型方法含接口和父类约束的泛型基础类和接口定义泛型方法定义备注Java 泛型学习备忘。GitHubthink_in_java简单泛型类publicclassGenericClassT{publicGenericClass(Titem){super();this.itemitem;}privateTitem;publicTgetItem(){returnitem;}publicvoidsetItem(Titem){this.itemitem;}}调用方式privatestaticvoidGenericLearn(){GenericClassIntegergenIntnewGenericClassInteger(1);GenericClassStringgenStrClassnewGenericClassString(Hello);}简单泛型方法泛型类的类型参数T紧跟在类名后面泛型方法的类型参数T紧跟在方法声明的返回类型前面。publicclassGenericFuns{publicstaticTTfun(T[]a){returna[0];}publicstaticT,UStringfun2(T[]a,U[]u){TitemTa[0];UitemUu[0];returnitemT.toString() itemU.toString();}publicstaticvoidcallFun(){String[]arrsnewString[]{a,b};System.out.println(GenericFuns.fun(arrs));System.out.println(GenericFuns.Stringfun(arrs));System.out.println(GenericFuns.fun2(newFloat[]{1.0f},newInteger[]{1}));System.out.println(GenericFuns.Float,Integerfun2(newFloat[]{1.0f},newInteger[]{1}));}}含接口和父类约束的泛型基础类和接口定义abstractclassBaseClass{publicabstractintgetInt();}interfaceBaseInterFace{publicStringgetStr();}classTestClassextendsBaseClassimplementsBaseInterFace{OverridepublicStringgetStr(){returnTestClass;}OverridepublicintgetInt(){return1000;}OverridepublicStringtoString(){returnTestClass;}}泛型方法定义extends后无论是接口还是类都用extends关键字表示 Is-A 关系。若需同时满足多个类型约束用符号隔开。publicclassGenericExtends{publicstaticTextendsBaseClassintfun1(Titem){returnitem.getInt();}publicstaticTextendsBaseInterFaceStringfun2(Titem){returnitem.getStr();}// T 必须同时是 BaseClass 的子类且实现了 BaseInterFacepublicstaticTextendsBaseClassBaseInterFacevoidfun3(Titem){System.out.println(item.toString());}publicstaticvoidcallFun(){GenericExtends.fun1(newTestClass());GenericExtends.fun2(newTestClass());GenericExtends.fun3(newTestClass());GenericExtends.TestClassfun1(newTestClass());GenericExtends.TestClassfun2(newTestClass());GenericExtends.TestClassfun3(newTestClass());}}备注泛型其实很复杂尤其是类型擦除Type Erasure和通配符Wildcard后续会单独记录备忘。