「//fix this/」の記事インデックス

//fix this/ Javaコードの間違いをさがせ!


このシリーズは、あなたのコーディング・スキルを試すコーナーです。毎号オラクルのJavaエバンジェリストたちが、Javaコードに関する難問を出題し、正解と解説を掲載します。是非、毎号チャレンジして貴方のコーディング能力の向上にお役立て下さい。


第11回目 (Java Magazine 2013/Nov-Decからの出題)


1. 今回のテーマ 「ジェネリクスに関する問題」 

ジェネリクスが Java に追加されたのは比較的最近(Java SE 5 から)であるため、その使用法は必ずしも明確ではありません。



2. コード

Sample クラス内で修正すべき個所はどこですか?


import java.util.ArrayList;
import java.util.HashMap;

public class Sample{

  public ⟨T⟩ void setArrayList(ArrayList⟨T⟩ arrayList, T t){
  }
  public ⟨T⟩ void setArrayList(ArrayList arrayList, Object obj){
  }
  public ⟨T extends HashMap⟨K,V⟩⟩ void setArrayList(ArrayList⟨T⟩ arrayList){
  }

}

3.正しいのはどれ?

上記のコードの正しい修正方法を選んでください。

1) setArrayList という名前のメソッドを 3 つ宣言することはできないので、最後のsetArrayList メソッドを削除する。

2)型パラメータ T は HashMap






【答え】

正解は 4)(最初の 2 つのメソッドのうちのどちらかを削除し、3番目のメソッドに型パラメータ K および V を追加する)です。

Sample 内のメソッド setArrayList(ArrayList arrayList, T t) と setArrayList(ArrayList arrayList, Objectobj) は、同じイレイジャ(setArrayList(ArrayList,Object))を持ちます。1 つのクラス内に、同じイレイジャを持つメソッドを 2つ定義することはできません。また、K と V は型解決が不可能です。


<< 第10回へ戻る I 第12回へ進む >>

「//fix this/」の記事インデックス