SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【最新Javaアップデート解説】変更点と過去バージョンからのおさらい

【Java 23リリース】Project Amberの新しい機能でより自然なコーディングがしやすくなる

第2回:Javaのバージョンアップの大きな流れと主なツールの変更点

  • X ポスト
  • このエントリーをはてなブックマークに追加

 前回の記事で現在のJavaのバージョンアップに影響を与えるプロジェクトについて紹介しました。その中でもっともJava開発者に影響を与えるのが、Project Amberです。今回は、そのProject Amberでの変更点を中心にJava開発者に影響を与えると思われる新機能や変更点について紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

面倒なmainメソッドをより簡単にする(JEP477 - Third Preview)

 Javaプログラムを実行する場合、必ずmainメソッドが必要になり、そのたびにリスト1の記述をすることになります。

[リスト1]従来のmainメソッド(src/java/jp/enbind/jep477/Jep477.javaの抜粋)
public class Jep477 {
    public static void main(String args[]){
        // ここで実際の処理を記述
    }
}

 Javaはコンパイル言語であり、また、ある程度のコード量があるプロジェクトで多く使われてきました。その中で、上記の書き方に多少煩わしさを感じても、一度だけ記述すればよいので実際にはそれほど大きな問題にはなりませんでした。

 しかし、前回の記事で紹介したマルチファイル・ソースコード・プログラムの起動のように、Javaがスクリプト言語と同じ感覚で使えるようになりつつあります。そうなると、このmainメソッドの煩わしさの課題が顕著になってきます。今回の修正では、この課題に対する対応がされています。

 例えば、以下は簡略化の例です。

[リスト2]簡略化されたmainメソッド(src/java/jp/enbind/jep477/Jep477.javaの抜粋)
public class Jep477 {
    private String name = "";

    // (1) staticメソッドである必要がなくなった
    void main(){
        System.out.println("test");
        //  (2) thisにアクセスが可能
        this.name = "world";
        test1();
    }

    protected void test1(){
        System.out.println("method : " + this.name);
    }
}

 まず、(1)のようにmainメソッドがstaticメソッドである必要がなくなりました。そして、それに伴い(2)のようにnewをすることなくthisにアクセス可能になりました。

 しかし、ここまでできるとなると、このクラス定義すらも書きたくないと思う方もいるでしょう。そういった書き方をしたのがリスト3です。つまり、よりスクリプト的な書き方がしやすくなったのです。

[リスト3]クラス定義も必要なくなったmainメソッド(src/java/jp/enbind/jep477/Jep477.javaの抜粋)
import java.lang.System.Logger;

void main() {
    // (1) java23から java.io.IOクラスが追加され、クラス名などを指定せず、関数のように使える
    // 以下のインポートが暗黙的にされていることと同義
    // import static java.io.IO.*;
    println("test");

    // (2) インポートしたクラスの使い方(これまで通り)
    Logger logger = System.getLogger("app");
    logger.log(Logger.Level.INFO,"main start");

    // 省略
}

 スクリプトのように使う場合には、より短く、より簡単に記述できることが重要になるため、System.out.printlnなども記述が長すぎます。そこでjava.io.IOクラスが導入されました。IOクラスでは、コンソール上の入出力を制御するstaticメソッドがまとめられています。

表1:java.io.IOクラスのstaticメソッド
メソッド 説明
static void print(Object obj) 指定したオブジェクトの文字情報をシステムコンソールに表示する
static void println(Object obj) 指定したオブジェクトの文字情報と改行をシステムコンソールに表示する
static String readln(String prompt) 指定した文字列をシステムコンソールに出力し、システムコンソール上からの一行での入力を受け付ける

 しかも、IOクラスは暗黙的にstaticインポートされます。つまり、「import static java.io.IO.*;」が暗黙的に付与されます。これによって、明示的にインポートすることなく、関数的な呼び出しが可能になります。

java.baseモジュールの暗黙インポート

 先述したjava.io.IOクラスのメソッドだけではなく、java.baseモジュールのクラスはimportせずに利用できます。java.baseモジュールには、よく利用するパッケージが含まれます。

[リスト4]java.baseの暗黙import(src/java/jp/enbind/jep477/Jep477.javaの抜粋)
void main() {
    // 省略

    // (1) java.base モジュールに属するクラスは import せずに使える
    File file = new File("test/sample.txt");
    Instant now = Instant.now();
    Date data = new Date();
}

 したがって、(1)のように何も宣言せずに使えるため、ListやMapといったインターフェースやFileなどの基本的なクラスはimportせずに利用することが可能です。

次のページ
コンストラクタにおける定義記述に関する改善(JEP482 - Second Preview)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【最新Javaアップデート解説】変更点と過去バージョンからのおさらい連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20334 2024/10/24 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング