LoginSignup
0
0

More than 3 years have passed since last update.

[Java] Comparableを実装していないクラスに対してコンパイルエラーが発生しない理由

Last updated at Posted at 2019-06-22

Comparableを実装していないクラスを、TreeSetなどで扱う際、コンパイルエラーではなく、実行時エラー(ClassCastException)がスローされる仕様になっている。
これは、ジェネリクス使用時に、親クラスはComparableインターフェースを実装せずに、子クラスがComparableを実装するシーンを想定していると考えられる。

Musician親クラスはComaparableを実装していないが、子クラスが実装している。


class Musician {

    public enum Category {
        ROCK, JAZZ, CLASSIC
    }

    public String getName() {
        return name;
    }

    public Category getCategory() {
        return category;
    }

    private String name;
    private Category category;

    Musician(String name, Category category) {
        this.name = name;
        this.category = category;
    }
}

class ChildMusician extends Musician implements Comparable {

    ChildMusician() {
        super("", null);
    }

    @Override
    public int compareTo(Object o) {
        return 0;
    }
}

実行


Set<Musician> musicianSet = new TreeSet<>();
musicianSet.add(new ChildMusician());

子クラスの存在がなければ、一行目でコンパイルエラーを出した方が効率的だと考えられるが、子クラスが存在することもあるため、実行時にキャストのチェックをするようになっている。

0
0
1

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
0
0