モジュールシステムの知識をテストするための問題です。
問題
次のモジュール型プロジェクトで、正しい出力を選んでください。
// module-info.java
module com.example.myapp {
exports com.example.myapp;
}
// Main.java
package com.example.myapp;
public class Main {
public static void main(String[] args) {
System.out.println("Hello from MyApp!");
}
}
選択肢
- A. Hello from MyApp!
- B. コンパイルエラーが発生する
- C. モジュール構成エラーが発生する
- D. 実行時にエラーが発生する
答えと解説
回答を見る
答え
A. Hello from MyApp!
解説
基本説明
Javaのモジュールシステムは、Java 9から導入され、プログラムをモジュールという単位で分割できるようになりました。この問題の例では、モジュールcom.example.myapp
を定義し、exports
指示子を使ってcom.example.myapp
パッケージを外部に公開しています。その他のプロジェクトがこのモジュールからクラスを利用するためには、このexports
宣言が必要です。
誤答理由
コンパイルエラー(選択肢B)は通常、文法上の誤りや、ファイル配置の問題などによって引き起こされますが、このケースでは適切にmodule-info.java
が配置されているため、問題ありません。モジュール構成エラー(選択肢C)や実行時エラー(選択肢D)は、モジュールの依存関係が不明確な場合に発生しますが、この例では1つのモジュールに自己完結しており、他のモジュールへの依存関係がないため発生しません。
つまずきポイント
Javaのモジュールシステムは比較的新しいため、理解しづらい部分があります。具体的には、module-info.java
を正しい場所に配置しないと意図した通りに動作しません。また、モジュールを構成する際は、モジュール名やパッケージ名を的確に指定する必要があります。
発展知識
モジュールシステムを使うと、Javaアプリケーションをモジュールごとにそれぞれ管理でき、依存関係やバージョン管理が容易になります。大規模システムでは、この仕組みを活用することで、プロジェクトのメンテナンス性やパフォーマンスを向上させることが可能です。
また、モジュールシステムはセキュリティ面においても利点があります。他のモジュールからアクセスを制限することができ、過剰なクラス露出を防ぐことで脆弱性を軽減できます。