たま

技術的なメモ置き場。主にJava。

Java9 interfaceクラス

Java9でinterfaceクラスにprivateメソッドを定義できるようになった。

interface Foo {
    
    private String bar() {
        return "bar";
    }
    
    // オーバーロードもOK
    private String bar(String baz) {
        return baz;
    }
    
    // staticメソッドもOK
    private static void qux() {
    }
}

Java9 try-with-resource文

Java9ではtry-with-resource文で、try句でのリソースの変数を宣言しなくてもよくなった。

FileInputStream is = new FileInputStream("foo");
try (is) {
    // omit
} catch (Exception e) {
}

// Java8
try (FileInputStream is = new FileInputStream("foo")) {
    // omit
} catch (Exception e) {
}

Java9 識別子

Java9からアンダースコア1つを識別子として使えなくなった。

// NG
String _ = "Foo";
// 2つならOK
String __ = "Foo";

Java18から引数が1つのラムダ式のみで使えるようにするためらしい。

_ -> foo()