关于泛型的一个详解
1. 什么是泛型,为什么要使用泛型。
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?
顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型 eg:String,Integer。
泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
2.泛型的一个使用-Class类
首先创建一个泛型类Paradigm
public class Paradigm<T> {
private T key;
public Paradigm(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
this.key = key;
}
public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定
return key;
}
}
创建测试类GenericTest
@Slf4j
public class GenericTest {
public static void main(String[] args) {
//泛型的类型参数只能是类类型(包括自定义类)
//传入的实参类型需与泛型的类型参数类型相同,即为Integer.
Paradigm<Integer> genericInteger = new Paradigm<Integer>(123456);
System.out.println("genericInteger = " + genericInteger.getKey());
//传入的实参类型需与泛型的类型参数类型相同,即为String.
Paradigm<String> genericString = new Paradigm<String>("key_vlaue");
System.out.println("genericString = " + genericString.getKey());
}
}
意义:这样就实现的一个代码块的重复使用,减少一个代码的冗余
2.1泛型的使用-Interface
创建泛型接口
public interface ParadigmInterface<T> {
T next(String s);
}
创建泛型接口实现方法
public class ParadigmInterfaceImpl<T> implements ParadigmInterface<T> {
@Override
public T next(String s) {
return (T) s; // 不规定传入的类型时<T>返回的T
}
}
创建好了接口以及实现的方法,我们接着调用一下我们所写的一个接口和结果的输出。
@Slf4j
public class GenericTest {
public static void main(String[] args) {
// //泛型的类型参数只能是类类型(包括自定义类)
// //传入的实参类型需与泛型的类型参数类型相同,即为Integer.
// Paradigm<Integer> genericInteger = new Paradigm<Integer>(123456);
// System.out.println("genericInteger = " + genericInteger.getKey());
// //传入的实参类型需与泛型的类型参数类型相同,即为String.
// Paradigm<String> genericString = new Paradigm<String>("key_vlaue");
// System.out.println("genericString = " + genericString.getKey());
ParadigmInterface paradigmInterface = new ParadigmInterfaceImpl();
String test = "测试泛型接口";
System.out.println("console: = " + paradigmInterface.next(test));
}
}
好啦,现在泛型就先介绍到这儿了。另外,提到泛型,大家用到最多的就是在集合中,其实,在实际的编程过程中,自己可以使用泛型去简化开发,且能很好的保证代码质量及其实现冗余的减少。