前言

日常琐碎的时间下,不适合看一些长篇高质量的文章,但是琐碎时间也是时间,看一些短小精悍的文章来查缺补漏也是极好的。碎花化的时间,就交给“碎片化的文章”来填充吧。

今天“碎片化文章”主题:泛型-有限通配符。之前发过一篇文章,感觉并没有聊明白,所以重新整理了一篇文章,旨在解释清楚:有限通配符存在的意义。

正文

聊聊泛型

开篇先问大家一个问题:如何理解泛型?

Java官方文档是这样说的:Generics enable types (classes and interfaces) to be parameters when defining classes, interfaces and methods.(翻译过来就是:泛型将类型参数化)

因为这样的特性,让我们在写代码的时候很方便,而且更安全和可靠。

OK,现在咱们来进一步思考泛型,刚才提到了泛型的好处。这里咱们想一想:是不是泛型总是应用在对外提供能力的接口上?

因此这里引申出来了泛型更深层的意义:在设计一些较底层的模块时,泛型可以提供更好的规范,减少上层使用时出错的可能。

聊聊有限通配符

先上一段关于上下限通配符的代码:

java传过来泛型传过来的对象 java如何传递泛型参数_java泛型作文参数传递

熟悉有限通配符语法的同学,都知道:

对于意味着只能取( get())到T及T子类,而不能放入( set())。对于意味着只能放( set())到T及T父类,而不能取到( get())。这也就是上述截图中爆红的原因。

不知道有多少人和我一样对这种用法有“疑惑”:为啥要这样限制。其实这里我们不妨想想,我们日常开发时写过多少次这样的代码?我相信答案是一定是:很少。

没错,这些限制本身也不是给上层业务方提供的!这句话不好理解?没关心继续往下看。

咱们在看一段代码:

java传过来泛型传过来的对象 java如何传递泛型参数_List_02

就拿上述中这个例子,假设我要调用这个方法,其实我们并不关心super和extends的用法,我们关心的是:当我按方法规范传递参数时,方法的实现能不能达到我的预期。

这里我们假设按 mergeList()的要求正确的传入了俩个List,那么很明显 in2这个List能够顺利合并到 out中。

方法调用者很方便,方法提供者也很方便。有限通配符以一种规范让参与者们都能在代码编写阶段不出错、少出错。

因此,充分理解才是最重要的~

尾声

OK,接下来让我们关掉手机,思考3分钟,一切都是这么顺其自然~