相信大部分初学Java泛型的同学都会觉得很难理解这个知识点。详细介绍,包括:泛型、通配符、泛型擦除、泛型应用入门必须了解的知识点。今天给大家讲解第一个知识点:泛型入门必须了解的知识点。先帮大家梳理一下泛型基本概念的相关知识点,欢迎大家继续关注我的后续文章。GenericDefinitionGeneric的英文是generics,generic是通用的意思,翻译成中文,pan应该是broad的意思,type就是类型。所以泛型是应用广泛的类型。但是还有另一种更准确的说法,泛型用于参数化类型,或者类型可以作为参数传递给类或方法。我们通过比较两个例子来理解泛型的使用和好处。1.不使用泛型的实例publicclassValueDemo{Objectvalue;publicObjectgetValue(){returnvalue;}publicvoidsetValue(Objectvalue){this.value=value;}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubValueDemodemo=newValueDemo();demo.setValue(888);intvalue=(int)demo.getValue();demo.setValue("hello");Stringvalue1=(String)demo.getValue();System.out.println(value);System.out。println(value1);}}2.使用通用实例publicclassValueDemoT{Tvalue;publicTgetValue(){returnvalue;}publicvoidsetValue(Tvalue){this.value=value;}publicstaticvoidmain(String[]args){//TODO自动生成的方法stubValueDemoTdemo=newValueDemoT();demo.setValue(888);Integervalue=demo.getValue();ValueDemoTdemo1=newValueDemoT();demo1.setValue("你好");Stringvalue1=demo1.getValue();System.out.println(值);System.out.println(value1);}}通过上面的例子,我们可以发现使用泛型的好处主要有三个:1.与相比,Object替代了所有类型,泛型不再需要强制转换结果!泛型允许数据类型像参数一样从外部传入,实现类型参数化2.泛型参数一旦确定,如果类型不匹配,编译器将不会通过。如下图所示:这是一种类型安全检测机制,在一定程度上提高了软件的安全性,防止了低级错误。3.泛型提高了程序代码的可读性,不必等到运行时才强制转换。在定义或实例化阶段,由于ValueDemoT类型的作用,程序员一眼就能猜到是什么代码操作数据类型。泛型类、泛型方法和泛型接口泛型按照用途可以分为三种。通用类。通用方法。通用界面。泛型类publicclassDemo{Tfield1;}的实例化方法如下:Demodemo1=newDemo<>();演示<整数>demo2=newDemo<>();泛型方法必须用声明,包括带参数的方法和不带参数的方法,具体代码如下publicTtestMethod2(Tt){returnnull;}}泛型接口泛型接口和泛型类的定义和用法基本相同,代码如下:publicinterfaceDemoT{publicTtest();}上下boundariesofgenerics在使用泛型时,我们还可以限制传入的泛型类型参数的上限和下限。—泛型参数使用extends关键字表示参数只能接受类class及其子类。这里的等级是上限。—泛型参数使用super关键字表示该参数只能接受类class及其父类。这里的等级是下限。使用的代码如下:publicclassVehicle{publicvoiddrive(){};publicvoidbrake(){};}publicclassCarextendsVehicle{publicvoiddrive(){System.out.println("car'sdrivemethod");};publicvoidbrake(){System.out.println("brakemethodofcar");};}publicclassBenzextendsCar{publicvoiddrive(){System.out.println("benzdrive");};}定义一个泛型方法publicclassCarT{publicstaticvoidmain(String[]args){getCar(newBenz());getCar(newCar());getCar(newVehicle());//IDE报错}publicstaticvoidgetCar(Tcar){car.drive();}在方法getCar(Tcar)参数的参数只能在Car类或其子类的实例中传入,而不能传入Car的父类Vehicle的实例中!super的使用与extends类似,泛型的注意点这里不再详述。1.泛型类型方法中的泛型参数与类的泛型参数无关,代码如下:publicclassDemo1{publicTtestMethod1(Tt){returnt;}publicstaticvoidmain(String[]args){Demo1demo=newDemo1();Integeri=demo.testMethod1(newInteger(123));System.out.println(i);}}可以看到Demo1和testMethod1(Tt)可以被分配不同的类型,前者是String而后者Or是Integer。2.为了规范起见,泛型中的T只是一种习惯写法,我们可以用其他标识符来代替,例如。常见的其他约定写法如下:T代表一般的任意类。E代表元素。K代表键。V代表Value,通常和K一起使用。3.泛型可以有多个参数。我们以2个参数为例。代码如下:publicclassValueDemoT2{Avalue1;Bvalue2;publicvoidsetValue(Ap_value1,Bp_value2){value1=p_value1;value2=p_value2;}publicstaticvoidmain(String[]args){ValueDemoT2demo=newValueDemoT2();demo.setValue(123456,"hello");System.out.println(demo.value1);System.out.println(demo.value2);}}执行代码输出:123456Hello4.在泛型类或泛型方法中,不接受8种基本数据类型。比如下面的代码,通过Listli=newArrayList<>();是无法编译的;