argius note

プログラミング関連

enum classes cannot override finalize method

http://java.sun.com/javase/6/jcp/beta/apidiffs/index-diffs.html
Java6のドキュメント見てたら、こんなのを見つけた。Java 5.0(fcs) と Java6 Beta のAPIドキュメントのDIFFをHTMLで見られるらしい。
ここで何となく"java.math.RoundingMode(enum)"を見たら、finalizeメソッドがObjectクラスからではなく、Enumから継承に変更になっている。5から6でこんな変更があったの?

実際にコンパイルを試してみた。コードは以下のものを使用。

public enum EnumClassesCannotHaveFinalizeMethods {
    ;
    protected void finalize() {
    }
    public static void main(String[] args) {
        System.out.println(EnumClassesCannotHaveFinalizeMethods.values());
    }
}

SunのJDKでは、1.5.0_13,1.6.0_03で試したら、

EnumClassesCannotHaveFinalizeMethods.java:8: 列挙型が finalize メソッドを持つことはできません。
    protected void finalize() {
                   ^
エラー 1 個

となった。しかし、Eclipse3.3.0で試したところ、Compiler&JRE=1.5だとコンパイル&実行できてしまった。Compiler&JRE=1.6だと、ライブラリのEnum.finalizeメソッドがfinalになっているので、"Cannot override..."となる。
とりあえず報告でした。