2
1

More than 3 years have passed since last update.

本当にあった怖いClassCastException

Last updated at Posted at 2020-07-03
テスト対象メソッドのインターフェース
public class Foo {
    public void process(List<String> arg0) {
        /* 後述 */
    }
}
自分で書いた適当なテストコード
List<String> arg0 = Arrays.asList("あ", "い", "う");

Foo foo = new Foo();
foo.process(arg0);

これが何故かClassCastExceptionで落ちる。
テスト対象のソースを見てビックリ。

なんでわざわざキャストしてんだよ
public void process(List<String> arg0) {
    // ↓なんとコンパイル警告すら出ない!
    List<String> ls = (ArrayList) arg0;

    // 以下略
}

コンパイル警告すら出ない恐ろしいコードでしたとさ……

当たり前だけどこっちだと落ちなかった。
(落ちないから良いとは言っていない)

新人が書いたテストコード
List<String> arg0 = new ArrayList<>();
arg0.add("あ");
arg0.add("い");
arg0.add("う");

Foo foo = new Foo();
foo.process(arg0);
2
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1