• Java泛型之自限定类型


    在《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编程思想》这本书,我的个人理解:

    1. 对新手肯定是极不友好的,可能是翻译的问题,语言上稍显晦涩;
    2. 书名就《Java编程思想》,英文名为《Thinking In Java》,讲的就思想这个层面的事情,,不能以常理视之,作者的很多语言,似乎是在解决Java语言的设计思想和问题等,而且在做这种讲解时,说明如何使用和注意事项等不在作者的考虑范围内,如果想知道这些,建议直接参考《Java核心技术卷》.
    3. 虽说Java与C++有极其深的渊源,甚至可以称Java为C++—--,但毕竟是两门语言.作者经常性的从C++开始说起,在C++的基础上讲Java,实在是让人费解.如果给这本书改个名字的话,参考网友所言:《Thinking Java In C++》.
  • 相关阅读:
    案例8高级打砖块游戏
    案例17——Flash地图应用
    案例11——用遮障制作聚光灯效果及冷却动画
    案例1:用Flash CS工具制作进度条
    Flex 中可以应用于 ActionScript 类的元标签
    案例7用Flash Builder做虚拟计算器
    案例16——没特效还玩毛个Flash
    案例9不要在加载时面对苍白的屏幕
    案例15——游戏物品栏的制作(AS3高级应用)
    案例2心跳模拟
  • 原文地址:https://www.cnblogs.com/jamesvoid/p/10545173.html
Copyright © 2020-2023  润新知