-1
class A {}

class B extends A{}

class C extends B{}

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

教えてください、次のうちどれがメソッドring()の合法的なリターンタイプである可能性がありますか?

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();
4

3 に答える 3

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(); 有効:警告付き。
于 2013-03-23T18:26:20.670 に答える
0

あなたは本当に「有効なreturnステートメントは何ですか?」と尋ねるべきです。これらの仕事のほとんど。そうでないものは次のとおりです。

  • new ArrayList();を返します。// ArrayListはリストですが、AはBを拡張しません。
  • new ArrayList();を返します。//ワイルドカードジェネリックをインスタンス化することはできません。宣言することはできますが、自分で作成することはできません。
  • 新しいPriorityQueue();を返します。//PriorityQueueはリストではありません。
于 2013-03-23T18:07:34.433 に答える
0

Bのリストを返す必要があるため、1番目と2番目のリストが許可されます。

A IS-A Bであるというのは真実ではないので、3つ目はそうではありません。AはBを拡張しません。

4番目のものは私には意味がありません。

LinkedListはリストであるため、5つ目は問題ありません。

PriorityQueueはListを実装していないため、6番目のものは機能しません。

7つ目は問題ありませんが、コンパイラーが警告する場合があります。型安全性は低く、それがジェネリックスのポイントです。

于 2013-03-23T18:08:04.320 に答える