• ビジネス
  • IT
  • テクノロジー
  • 医療
  • 建設・不動産
  • TRENDY
  • WOMAN
  • ショッピング
  • 転職
  • ナショジオ
  • 日経電子版
  • 日経BP
  • PR

  • PR

  • PR

  • PR

  • PR

最新Java情報局

Java SE 9、Project Jigsawにおけるpublic (2/5)

櫻庭 祐一=Java in the Box 2016/05/26 ITpro

スコープ

 Javaではフィールドやメソッドなどのスコープを決めるアクセス修飾子として、以下の4種類が存在していました。

  • public どこからでもアクセス可能
  • protected 自クラスおよび、サブクラス、自パッケージからアクセス可能
  • デフォルト 自クラスおよび、自パッケージからアクセス可能
  • private 自クラスのみアクセス可能

 しかし、Project Jigsawの導入によってpublicの扱いが変更されています。publicは以下のように3種類に分類できます。

  • 全てのモジュールからアクセス可能なpublic
  • 特定モジュールからアクセス可能なpublic
  • モジュール内pubic

 全てのモジュールからアクセス可能なpublicはモジュール定義でexportsされたパッケージに含まれる場合に相当します。特定モジュールからアクセス可能なのは、export … to … で指定されたパッケージに含まれる場合です。最後のモジュール内publicがモジュールでのpublicのデフォルトです。

 アクセス修飾子の種類は増えていませんが、モジュール導入によりスコープが6種類になったわけです。

インタフェースと実装クラス

 Java EEのAPIには、インタフェースと実装が切り離されているものが多くあります。JARファイルもインタフェースと、実装は分離されています。

 Java SEでも、JAXPのようにインタフェースだけ策定されているAPIもあります。JAXPは、実装がCrimsonからApach Xercesに変更されましたが、インタフェースは変更していないため、使い方は同じです。

 ここで問題になるのは、インタフェースを実装したクラスをどのように提供すればよいかという点です。

 このような問題に対して、Java SEではjava.util.ServiceLoaderクラスを使用して実装クラスを探索し、ロードすることができました。ServiceLoaderクラスで実装クラスをロードするには、JARファイルに仕掛けをしておくことが必要です。

 JARファイルには必ずMETA-INFディレクトリが含まれます。通常、META-INFディレクトリにはMANIFEST.MFファイルだけが配置されています。

 ServiceLoaderクラスを使うには、META-INFディレクトリにservicesディレクトリを作成し、そこにインタフェース名と同一のファイルを作成します。そのファイルにはインタフェースの実装クラス名を記述します。複数の実装クラスがある場合は、1行に1クラスずつ記述します。

 これに対して、Project Jigsawでは実装クラスの提供をモジュール定義に記述できるようになりました。実装クラスを記述するにはprovides文を使用します。

 この動作を、簡単なサンプルで確かめてみましょう。ここでは、文字列を返すというインタフェースと、その実装クラスを作成してみます。

 まずはインタフェースです。Helloインタフェースという名前にしました(リスト3)。

  

リスト3●Helloインタフェース

package net.javainthebox.hello;

public interface Hello {
    public String sayHello();
}

  

 このインタフェースをnet.javainthebox.helloモジュールとしてモジュール化します。モジュール定義をリスト4に示しました。

  

リスト4●net.javainthebox.helloモジュール定義

module net.javainthebox.hello {
    exports net.javainthebox.hello;
}

  

 Helloインタフェースを含むパッケージをexports文で公開しています。

あなたにお薦め

連載新着

連載目次を見る

今のおすすめ記事

ITpro SPECIALPR

What’s New!

経営

アプリケーション/DB/ミドルウエア

クラウド

運用管理

設計/開発

サーバー/ストレージ

クライアント/OA機器

ネットワーク/通信サービス

セキュリティ

もっと見る