SHOEISHA iD

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

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

直近開催のイベントはこちら!

HRzine×SmartHR 人材・組織活性化フォーラム

2024年12月6日(金)13:00~15:30

主要製品スペック一覧

人事業務の効率・確度・精度を高めるために欠かせないHRテクノロジー。その主な製品の機能を分野ごとに比較できる資料群です。製品検討の参考資料としてご活用ください。

eラーニング・LMS<br>主要製品スペック一覧 2024

eラーニング・LMS
主要製品スペック一覧 2024

その他のスペック一覧

人事労務管理システム<br>主要製品スペック一覧 2023

人事労務管理システム
主要製品スペック一覧 2023

タレントマネジメントシステム<br>主要製品スペック一覧 2023

タレントマネジメントシステム
主要製品スペック一覧 2023

みちこ先生のオラクル認定Javaプログラマ Silver SE 7/8 合格コース | 特別授業

【認定Java Silver】ここが変わった! OCJP Silver SE 8要点解説[後編] ~ 新出題ラムダ式


  • Facebook
  • X
  • Pocket
  • note
  • hatena

 本記事では、Java SE 8に対応したOracle社のJava認定資格「Oracle Certified Java Programmer, Silver SE 8」について、旧バージョン(Silver SE 7)との出題範囲の違いや、Silver SE 8で出題に追加された新トピックの技術を前後編で解説しています。その後編となる今回は、Silver SE 8で出題に追加された新トピックであり、Java SE 8新機能の目玉でもある「ラムダ式の基本」を取り上げます。記事の最後に模擬問題も掲載しているので、ぜひチャレンジしてください!

  • Facebook
  • X
  • Pocket
  • note
  • hatena

本記事の目次前編はこちら

本記事に掲載しているサンプルコードを一括ダウンロードできます(Sample1-9.zip

デフォルトメソッドと関数型インタフェース

Java SE 7まで、インタフェースに宣言できるメソッドは抽象メソッドだけでしたが、Java SE 8から、デフォルトメソッドstaticメソッドを記述できるようになりました。デフォルトメソッドとは、インタフェースの実装クラスで処理を実装されなかった場合に適用される(デフォルトの)処理を記述したメソッドです。この仕様変更を受け、コレクションAPIで提供されているインタフェースにも、デフォルトメソッドが追加されています。

ここでは、Java SE 8のSilver認定資格試験「Java SE 8 Programmer I」(試験番号:1Z0-808)の範囲に絞って、デフォルトメソッドとその使い方を解説します。

デフォルトメソッドを定義する構文は次のとおりです。

デフォルトメソッドの構文
[修飾子]  default 戻り値 メソッド名(引数リスト) {// 処理 }

(例)
default void foo() { System.out.println("foo()"); }

デフォルトメソッドに指定できる修飾子はpublicのみです。上記の例のように修飾子を指定していない場合には、強制的にpublic修飾子が付与されます。

デフォルトメソッドとstaticメソッドの詳細は、Gold SE 8試験(Java SE 8 Programmer II)で問われる内容であるため、以降の説明は、Silver SE 8試験(Java SE 8 Programmer I)の範囲に絞って解説します。

Java SE 8で導入されたデフォルトメソッドを2つ紹介しましょう。

Java SE 8で導入された2つのデフォルトメソッド
メソッド名 default boolean removeIf(Predicate<? super E> filter)
説明 Collectionインタフェースで提供。指定された処理を満たすこのコレクションの要素をすべて削除する
メソッド名 default void replaceAll(UnaryOperator<E> operator)
説明 Listインタフェースで提供。指定された処理を行い、現在のリストの要素を置きかえる

まず、各メソッドの引数を見ると、PredicateUnaryOperatorとなっています。これらもJava SE 8から導入されたAPIで、関数型インタフェースに分類されます。関数型インタフェースの特徴は「定義されている抽象メソッドが1つだけであること」です。なお、staticメソッドやデフォルトメソッドが含まれていても、抽象メソッドが1つだけであれば、関数型インタフェースとなります。

次表は、Java SE 8で導入された主な関数型インタフェースです。java.util.functionパッケージとして提供されています。

Java SE 8で導入された主な関数型インタフェース
インタフェース名 抽象メソッド 概要
Function<T,R> R apply(T t) 実装するメソッドは、引数としてTを受け取り、結果としてRを返す
Consumer<T> void accept(T t) 実装するメソッドは、引数としてTを受け取り、結果を返さない
Predicate<T> boolean test(T t) 実装するメソッドは、引数としてTを受け取り、boolean値を結果として返す
Supplier<T> T get() 実装するメソッドは、何も引数として受け取らず、結果としてTを返す
UnaryOperator<T> T apply(T t) 実装するメソッドは、引数としてTを受け取り、結果としてTを返すものになる。Functionを拡張したもの

匿名クラスによる抽象メソッドの実装

ラムダ式の書き方の説明に入る前に、まず、独自クラスでFunctionインタフェースのapply()メソッドを使用しているコードを見てみましょう(Sample1.java)。

■Sample1.java
import java.util.function.Function;

class MyFunc implements Function<String, String> {
  public String apply(String str) {
    return "Hello " + str;
  }
}
public class Sample1 {
  public static void main(String[] args) {
    MyFunc obj = new MyFunc();
    String str = obj.apply("naoki");
    System.out.println(str);
  }
}
■Sample1.javaの実行結果
Hello naoki

Functionインタフェースの実装クラスとしてMyFuncを定義し、apply()メソッドを実装しています。引数に文字列を受け取り、「Hello」と結合させて戻り値として返しています。MyFuncクラスを使用しているのはSample1クラスです。

なお、Java言語には「匿名クラス」という、特定の場所のみで利用したい(再利用もしない)クラスを実装する方法があります。匿名クラスはSilver SE 8試験の範囲外ですが、Sample1.javaを匿名クラスで実装した場合を見てみましょう(Sample2.java)。実行結果はSample1.javaと同じであるため掲載を割愛します。

Sample2.java
Sample2.java

匿名クラスとは、クラス名を指定せずに、クラス定義とインスタンス化だけを1つの式として記述したクラスのことです。匿名クラスは、あるクラスのサブクラス、または、あるインタフェースを実装したクラスになります。new スーパークラスまたはnew インタフェースという記述の後に、オーバーライドする処理をブロックとして記述します。Sample2クラスの5行目では、=演算子の後に、new Function<String, String>(){……}として、{}ブロック内にapply()メソッドを実装しています。そして、9行目のapply("naoki")の呼び出しにより、6行目が実行されます。

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

  • Facebook
  • X
  • Pocket
  • note
  • hatena
みちこ先生のオラクル認定Javaプログラマ Silver SE 7/8 合格コース連載記事一覧

もっと読む

この記事の著者

山本道子(ヤマモト ミチコ)

2004年Sun Microsystems社を退職後、有限会社Rayを設立し、システム開発、インストラクタ、執筆業などを手がける。著書に『オラクル認定資格教科書 Javaプログラマ Bronze SE 7/8』『同Silver SE 8』『同Gold SE 8』のほか、『SUN教科書 Webコンポーネントディベロッパ(SJC-WC)』、『携帯OS教科書 Androidアプリケーション技術者ベーシック』、『Linux教科書 LPICレベル1 スピードマスター問題集』(共著)、監訳書に『SUN教科書 Javaプログラマ(SJC-P)5.0・6.0 両対応』(いずれも翔泳社刊)などがある。月刊誌『日経Linux』(日経BP社刊)でLPIC対策記事を連載。日々の楽しみは晩酌、好きな言葉は表面張力。

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

この記事をシェア

  • Facebook
  • X
  • Pocket
  • note
  • hatena
HRzine
https://hrzine.jp/article/detail/39 2016/02/23 19:03

Special Contents

AD

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

2024年12月6日(金)13:00~15:30

イベントカレンダーを見る

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

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

メールバックナンバー

アクセスランキング

アクセスランキング