泛型的原理及使用方法
一、什么是泛型
Java从1.5之后支持泛型,泛型的本质是类型参数,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
若不支持泛型,则表现为支持Object,不是特定的泛型。泛型是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。许多重要的类,比如集合框架,都已经成为泛型化的了。
二、泛型有什么优点
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。
1、类型安全
泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就无法落实到代码中,仅仅能停留在设计方案或者注释中。
2、消除强制类型转换
泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了强制转换代码和出错机会。
3、潜在的性能收益
泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。
三、泛型如何表示
我们在泛型中是用的T,E,K,V有什么区别呢,实际上使用大写字母A,B,C,D......X,Y,Z定义的,就都是泛型,把T换成A也一样,这里T只是名字上的意义而已,如:
? 表示不确定的java类型,类型是未知的。
T (type) 表示具体的一个java类型,如果要定义超过两个,三个或三个以上的泛型参数可以使用T1, T2, ..., Tn
K V (key value) 分别代表java键值中的Key Value
E (element) 代表Element
extends、super 泛型的参数类型可以使用extends、super语句,例如<T extends superclass>。习惯上称为“有界类型”。
四、泛型的原理
泛型是一种语法糖,泛型这种语法糖的基本原理是类型擦除,即编译器会在编译期间「擦除」泛型语法并相应的做出一些类型转换动作
泛型是一种语法糖,泛型这种语法糖的基本原理是类型擦除,即编译器会在编译期间「擦除」泛型语法并相应的做出一些类型转换动作
泛型类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法,其中类和接口使用方式大致一致。
mybatis泛型通俗理解
泛型是为了解决抽象的问题。例如,方法A(int,int,string);B(string,char,char);C(int,float,char);的签名各不相同,但是要做相同的操作。可以看到他们有一个共同点——三个参数。那么我可以定义一个泛型方法string functionWithThreeArg(T1 arg1,T2 arg2,T3 arg3) where ... //这里做泛型约束,比如都实现了 ‘+’ 运算符 { string result = arg1 + arg2 + arg3; return result; } 那么现在来调用A,B,C三种情形,就可以使用泛型方法了 A:functionWithThreeArg(1,2,"3"); B:functionWithThreeArg("1",'b','c'); C:functionWithThreeArg(1,"1.5",'a'); 嗯,这里只是简单说明下问题,并不是实际代码。