Advertisement

牛客网日常刷题错题汇总2017-09-07

阅读量:
<泛型经典>
复制代码
    class A {}
    class B extends A {}
    class C extends A {}
    class D extends B {}
    Which four statements are true ?
    
    A.The type List<A>is assignable to List.
    B.The type List<B>is assignable to List<A>.
    C.The type List<Object>is assignable to List<?>.
    D.The type List<D>is assignable to List<?extends B>.
    E.The type List<?extends A>is assignable to List<A>.
    F.The type List<Object>is assignable to any List reference.
    G.The type List<?extends B>is assignable to List<?extends A>.
    
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读
只看尖括号里面的类型,明确点和范围两个概念:
复制代码
如果尖括号里面的是一个类,那么就将尖括号里面看成一个点,比如List<A>/List<B>...
    2.如果尖括号里面带问号,那么就看成一个范围,比如List<? extends A>...
    
      
      
    
    代码解读

当处理元素以及范围时,在尖括号内的任意两个元素间的赋值操作都是无效的,除非这两个元素是相同的。在尖括号中进行范围赋值时,应当确保小范围被赋予到大范围内;若非如此,则无法完成赋值操作。List和List<?>等价于最大的范围。

判断A为正确:在equals方法中,默认情况下只有当两个列表类型一致且元素完全相同的情况下才会认为它们是相同的对象。判断B为错误:只有当这两个引用实例的内容完全一致时才允许这种操作;判断C为正确:这表明它们属于最宽泛的类别;判断D也为正确:D.class也是? extends B范围中的一个点;判断E为错误:在Java语言中无法将范围赋值给引用实例;判断F也为错误:比如字符串引用和整数引用之间就无法直接进行赋值操作;最后判断G为正确:因为如果? extends A包含了所有? extends B的情况,则自然能够支持从G到F的引用传递。

全部评论 (0)

还没有任何评论哟~