2013-03-23 81 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中沒有實現列表。

第七屆一個是好的,但是編譯器會發出警告。它的類型安全性較低,這就是泛型的一個要點。

相關問題