欢迎大家来到IT世界,在知识的湖畔探索吧!
介绍下编程语言中一种泛型的写法,不管在此之前你有没有听过这个词,看完这篇以及后续应该会对泛型有个清楚的认识了。
先不解释泛型的概念是什么,所以还是以代码实战的方式来演示什么是泛型,看一个简单的例子:
public class LinuxConfig{ public void doLinuxInit(){ System.out.println("linux init"); } } public class Config { private String configName; private String configNumber; private LinuxConfig linuxConfig; }
欢迎大家来到IT世界,在知识的湖畔探索吧!
上面是一个Config类,很简单,存储配置名称、配置编号以及具体的Linux系统配置的信息。下面将会随着需求的不断迭代,对这个类逐步地改进:
需求迭代一:Config类需要同时适配Windows系统和Linux系统
这时候很简单的可以想到只要再增加一个Windows配置的类就行:
欢迎大家来到IT世界,在知识的湖畔探索吧!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这个类中的代码了。
下面就请出今天的主题泛型,来看看泛型如何做到在不增加基类的情况下,也能做到轻松适配各个系统。
欢迎大家来到IT世界,在知识的湖畔探索吧!public class LinuxConfig{ ......... } public class MacConfig{ ........ } public class WindowsConfig{ ........ } public class Config<T> { 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<LinuxConfig> configConfig = new Config<>("linuxConfig","linux-x333",new LinuxConfig()); Config<WindowsConfig> configConfig1 = new Config<>("windowsConfig","win-x555",new WindowsConfig()); } }
仔细看下上面这段代码可以发现,我们把基类删除了,同时可以看到Config这个类的改变,我们加了<T> 这个写法,这个就是泛型的写法,在测试调用中也可以看到,调用特定的类,我们会把特定的对象传进去:如:<LinuxConfig>,<WindowsConfig>,这个就是泛型的使用场景,当一组对象可以复用同一个类或者方法的时候,可以采用泛型减少代码的编写,同时达到复用的效果,但其实这也是java提供的一种语法糖的效果,所谓的语法糖也仅仅是编译器给开发着提供的一种便利,让开发者的代码复用性更高,更加易于扩展。
以上主要介绍了泛型的用法和场景,很多语言中都会有这种写法,目的都是一样的,为了增加应用程序代码的复用性,我这里用java语法来做了举例。后面也继续介绍一些其他语言中泛型的用法,以及它的高级用法。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/89530.html