介绍下编程语言中一种泛型的写法,不管在此之前你有没有听过这个词,看完这篇以及后续应该会对泛型有个清楚的认识了。
先不解释泛型的概念是什么,所以还是以代码实战的方式来演示什么是泛型,看一个简单的例子:
public class LinuxConfig{
public void doLinuxInit(){
System.out.println("linux init");
}
}
public class Config {
private String configName;
private String configNumber;
private LinuxConfig linuxConfig;
}
上面是一个Config类,很简单,存储配置名称、配置编号以及具体的Linux系统配置的信息。下面将会随着需求的不断迭代,对这个类逐步地改进:
需求迭代一:Config类需要同时适配Windows系统和Linux系统
这时候很简单的可以想到只要再增加一个Windows配置的类就行:
public class WindowsConfig{
public void doWinInit() {
System.out.println("windows init");
}
}
public class LinuxConfig{
public void doLinuxInit(){
System.out.println("linux init");
}
}
public class Config {
private String configName;
private String configNumber;
private LinuxConfig linuxConfig;
private WindowsConfig windowsConfig;
}
增加了windows的配置类后,又在Config中添加了关联,看上去完美解决上面的需求;但这时候需求再次迭代....
需求迭代二:Config类除了适配Windows系统和Linux系统,还需要适配Mac系统
其实这时候聪明的你可能已经意识到,问题来了,每增加一次系统适配,就得在Config这个类里面加入一段代码,试想,如果每次适配新系统时,只需要增加一个新的类,而不需要在原有的类上面增加代码,那该多好。
于是想到了一个法子:利用类的继承这个特性来创造一个基类,让所有的系统都继承这个基类,代码改善后如下:
public class OSConfig{
}
public class LinuxConfig extends OSConfig{
..........
}
public class WindowsConfig extends OSConfig{
............
}
public class MacConfig extends OSConfig{
..........
}
public class Config {
private String configName;
private String configNumber;
private OSConfig osConfig;
public Config(String configName , String configNumber , OSConfig osConfig){
}
}
在创建了OSConfig这个基类后,把Config这个类中的关联项也做了替换,这样每次增加一个系统适配的时候,就只需要继承这个基类即可,不需要再改动Config这个类中的代码了。
下面就请出今天的主题泛型,来看看泛型如何做到在不增加基类的情况下,也能做到轻松适配各个系统。
public class LinuxConfig{
.........
}
public class MacConfig{
........
}
public class WindowsConfig{
........
}
public class Config {
private String configName;
private String configNumber;
private T osConfig;
public Config(String configName , String configNumber , T osConfig){
}
}
//测试调用
public class GenericTypeTest {
public static void main(String[] args) {
Config configConfig =
new Config<>("linuxConfig","linux-x333",new LinuxConfig());
Config configConfig1 =
new Config