クラウドで 伸びる人沈む人 |
|
|
|
ClassCastExceptionをコンパイル段階で強制回避
<IT技術の処方箋:ClassCastExceptionをコンパイル段階で強制回避> 例えば、↓のソースを実行すると、ClassCastExceptionが発生します。 public class GenericTypeTest { public static void main (String args[]) throws IOException { List list = new ArrayList(); Integer a1 = new Integer("1"); list.add(a1); System.out.println( (String)list.get(0)); } } ※何故エラーが出るかは、こちらを参照してください。 http://www.searchman.info/tips/2670.html 実行すると、「ClassCastException」エラーが出ます。 しかし、「このようなエラーを実行するまでに検知できないか?」「できたら、コンパイルで検知したい」と思いますよね。 その方法を知っておきましょう。 方法は、簡単です。以下のとおりにするだけです。 (現行)List list = new ArrayList(); ↓ (改良)List<Integer> list = new ArrayList(); すると、↓の部分で、「キャストできません」とコンパイルエラーが出ます。 (String)list.get(0) なので、その部分は、 list.get(0) とすればOKです(戻り値が、 この方法を、総称型(Generic Type)と言います。こういう「縛り」をつけることにより、コンパイル段階でバグを少なくすることが出来ます。 |