local class

いまさら Java のブロックローカルなクラスは無名でなくてもいいことを知った。おおよそ 10 年もつかっているのに!

public class Foo {
    public static void main(String[] args) {
        Int[] ints = new Int[] {
            func(1),
            func2(2),
            func3(3)
        };

        for (int i = 0; i < ints.length; i++) {
            System.out.println(
                ints[i].getClass().getName() + " " + ints[i].intValue()
            );
        }
    }

    private static Int func(final int n) {
        class Inner implements Int {
            public int intValue() {
                return n;
            }
        }

        return new Inner();
    }

    private static Int func2(final int n) {
        class Inner implements Int {
            public int intValue() {
                return n;
            }
        }

        return new Inner();
    }

    private static Int func3(final int n) {
        return new Int() {
            public int intValue() {
                return n;
            }
        };
    }
}

interface Int {
    int intValue();
}