2013-03-23 79 views
-1
class A {} 

class B extends A{} 

class C extends B{} 

public class Test { 
    public List<? extends B> ring(){ 
    return ??? 
    } 
} 

请告诉我,它的下面可以是环法的法律返回类型()?以下方法的返回类型应该是什么?

return new ArrayList<B>(); 
return new ArrayList<C>(); 
return new ArrayList<A>(); 
return new ArrayList<? extends B>(); 
return new LinkedList<B>(); 
return new PriorityQueue<B>(); 
return new ArrayList(); 
+2

我闻到功课 – Maroun 2013-03-23 18:03:24

+0

是的..但为了学习的目的,你不觉得这有点困难的“功课”吗?请让我知道,如果你有一些想法。 – nakul 2013-03-23 18:06:54

+3

无论你做什么,都不要打开编辑器并自己尝试。它确实可能引发大的紧缩 – 2013-03-23 18:09:41

回答

1

你的函数返回List<? extends B>所以在下面查找您有效的选项:

  1. return new ArrayList<B>();有效:因为任何类是一个子和超一流的它自
  2. return new ArrayList<C>();有效:因为C是延伸B
  3. return new ArrayList<A>();无效:因为A不延长B
  4. return new LinkedList<B>();有效:因为List是超类LinkedList
  5. return new PriorityQueue<B>();无效的:因为PriorityQueue不是一个列表。
  6. return new ArrayList();有效:有警告。
0

你应该问“什么是有效的回报声明?”其中大部分工作。那些不是的:

  • return new ArrayList(); // ArrayList是一个列表,但A不扩展B.
  • return new ArrayList(); //你永远不能实例化通配类。你可以声明一个,但你不能自己创建一个。
  • return new PriorityQueue(); // PriorityQueue不是一个List。
0

既然你已经返回B的列表中,第一个和第二个是允许的。

第三个不是,因为这是不正确的,A是A B; A不延伸B.

第四个对我没有意义。

第五个是精细的,因为LinkedList的IS-A名单。

第六个是不行的,因为PriorityQueue中没有实现列表。

第七届一个是好的,但是编译器会发出警告。它的类型安全性较低,这就是泛型的一个要点。

相关问题