takeda_san’s blog

KotlinとVRを頑張っていく方向。

Java9から匿名クラスの総称型も省略して書けるって本当ですか!?

わかった気になっているうちにやっておこうシリーズ第二弾。
EclipseでJDK9-eaの設定をする記事はこちら。

takeda-san.hatenablog.com

Java9から匿名クラスの総称型もダイヤモンド演算子(って言い方でいいの?)で省略して書けるらしい。
試してみようじゃないの。

というわけで、よくみるJavaFXのカラムクラス内でセルの定義を匿名クラスで作るコードで検証。
(大人気のJavaFXだからね、よくみるよね、ね?)

というわけで、テーブルカラムを継承して自分のテーブルカラムを作る。
そしてその中で、テーブルセルの挙動を変えたい!みたいなコード。

package application;

import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;

public class TestColumn extends TableColumn<Person, String> {

    public TestColumn() {
        // セルをつくるぞ!
        this.setCellFactory(column -> {
            return new TableCell<Person, String>() {
                @Override
                protected void updateItem(String item, boolean empty) {
                    super.updateItem(item, empty);

                    if (!empty) {
                        // なんか処理
                    }
                }
            };
        });
    }
}

で、ここを毎回、えーと型はなんだったかな…?とクラスの先頭までスクロールしてコピペして書くのがめんどくさい。

       this.setCellFactory(column -> {
            return new TableCell<Person, String>() {

でも、書かないと怒られる。
匿名クラスじゃなきゃできるんだからさっ。ねっ?

で、書き換えてみました。

       this.setCellFactory(column -> {
            return new TableCell<>() {

お、エラーが出ない。
素晴らしい。

念のため、コンパイルのレベルを1.8に戻してみる。

f:id:takeda_san:20170525231644p:plain

やっぱり怒られるよね。

今回の内容とは関係ないけど、Eclipseなんだかjavafxパッケージの下にあるクラスがコード保管されない・・・?
久しぶりにimport文を自分で書いたよね。