在《java编程思想》中关于泛型的讲解中,提到了自限定类型:
class selfbounded<t extends selfbounded<t>>
作者说道:
这就像两面镜子彼此照向对方所引起的目眩效果一样,是一种无限反射。
selfbounded
类接受泛型参数t
,而t
由一个边界限定,这个边界就是拥有t作为其参数的selfbounded
接下来,作者用了近3页的纸来进行解释这个问题,且语言极其晦涩难懂(可能是翻译的问题),但是最后给了一个非常好的例子,可破此阵:
class selfbounded<t extends selfbounded<t>> {} class a extends selfbounded<a> {} class b extends selfbounded<a> {} // compile error:type parameter 'b' is not within its bound; should extend 'selfbounded<b>' // 编译器已经说得很明显了,因为 class b extends selfbounded<a> 不满足条件:t extends selfbounded<t> , // 如何才能满足条件呢?将类b的定义改为class b extends selfbounded<b>, // 上面的 class a 和 class b 都是满足条件的,因为 class a extends selfbounded<a> //class d extends selfbounded<b> {}
上面其实对书上的例子进行了一些修改,因为我们只需要这些就够了,从注释上我们就可以得到答案了.
如果想要上面class d
编译通过,除了将类b的定义改为class b extends selfbounded<b>
外,还可以将selfbounded
的定义修改为:class selfbounded<t extends selfbounded>
,也就是把最后面的<t>
去掉,这样条件就也满足了.
得出结论:
上面的粗体字就是答案,也即:,
selfbounded
类接受泛型参数t
,而t
由一个边界限定,这个边界就是拥有t作为其参数的selfbounded
什么?还没看懂,那就照着上面的例子,口中默念结论,慢慢就会懂了…..
最后再说一下对于《java编程思想》这本书,我的个人理解:
c++—--
,但毕竟是两门语言.作者经常性的从c++开始说起,在c++的基础上讲java,实在是让人费解.如果给这本书改个名字的话,参考网友所言:《thinking java in c++》.
如对本文有疑问, 点击进行留言回复!!
关于在IDEA中SpringBoot项目中activiti工作流的使用详解
视频编辑工具ACDSee Luxea Video Editor安装及激活图文教程
java spring整合junit操作(有详细的分析过程)
网友评论