icon
icon

Javaでコールバック処理を使う方法【初心者向け】

初心者向けにJavaでコールバック処理を使う方法について解説しています。関数に引数として渡す関数のことをコールバック関数と言います。コールバック処理の構造と書き方、Javaでの注意点について見ていきましょう。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

Javaでコールバック処理を使う方法について解説します。

実際にプログラムを書いて説明しているので、ぜひ理解しておきましょう。

 

なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。

 

田島悠介

今回は、Javaに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

コールバック処理を使う方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

コールバック処理とは

コールバック関数(コールバック処理)について説明します。

コールバック関数は、「ある関数Aに引数として渡す別の関数B」のことです。

関数Aの処理の一部を任意の別の関数に任せたい場合や、イベントの発生などの任意のタイミングで実行したいひとかたまりの処理を関数としてあらかじめ登録しておくときなどに利用されます。

例えば以下のように関数Aの中で、引数で渡した関数を呼び出すような構造にしておくと、関数Aの呼び出し元が関数Bの代わりに関数Cを渡せば、処理の内容を切り替えることができます。

void 関数A(関数) {
    ....
    関数();
}

// 関数Aに、関数Bを渡して呼び出す
関数A(関数B);

// 関数Aに、関数Cを渡して呼び出す
関数A(関数C);

 

コールバックの処理を行う方法

コールバック処理をJavaで実現するには、一工夫が必要になります。なぜならJavaでは関数を引数で渡すことが言語仕様上許容されていないからです。

 

[PR] Javaプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

例えば、Javaには「java.util.List」などのコレクションオブジェクトの要素を並び替えるためのユーティリティとして「Collections.sort( )」というAPIが標準で用意されています。

(APIの概要は左記のリンク先をご確認ください)

これを使ったコールバック処理の例を見てみましょう。

Collections.sort(companyList, new Comparator<Company>() {
    @Override
    public int compare(Company c1, Company c2) {
        return c1.getId() - c2.getId();
    }
});

第2引数の「new Comparator〜」の部分がコールバック処理です。ここでは無名クラスのインスタンスをコールバック処理として指定しています。

Java8からは、これと同じ処理をラムダ式を使ってより簡潔に書くことができます。

Collections.sort(companyList, (c1, c2) -> c.getId() - c2.getId());

さらに、「メソッド参照」という仕組みを使うと、次のようにC言語の関数ポインタと似たような形で書くこともできます。

// CompanyクラスのメソッドgetInt()の戻り値を比較するComparatorを生成
Collections.sort(companyList, Comparator.comparingInt(Company::getId));

// Companyをふたつ引数に取るstaticメソッドCallbackSample.compareCompanyをメソッド参照で渡す
Collections.sort(companyList, CallbackSample::compareCompany);


// CallbackSampleクラス内にメソッドを定義
static int compareCompany(Company c1, Company c2) {
    return c1.getId() - c2.getId();
}

もしあなたがJava8以降を使うのであれは、ラムダ式やメソッド参照を使った書き方を身につけておくとよいでしょう。

 

監修してくれたメンター

青柳哲夫

独立系SIerやベンチャーを経て、現在はフリーランスエンジニアとして活動しています。
PHPやJava・Rubyでの業務系Webアプリケーション開発が得意です。
TechAcademyではJavaコース・ブロックチェーンコースを担当しています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。

JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、習得することが可能です。

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する