【楽チンJava】メソッド参照での呼び出し方

こんにちは!侍エンジニア インストラクターの本多です。

Java8より「メソッド参照」が導入されました。

これを使うと、ラムダ式を書かずに直接メソッドを実行できる、などのメリットがあります。

この記事では、メソッド参照について

・メソッド参照とは何か
・メソッド参照の使い方

という基本的な内容から、

・コンストラクタ参照

といった応用的な内容に関しても解説していきます。

今回はメソッド参照について、使い方をわかりやすく解説します!

なお、ラムダ式そのものについて知りたい方は、以下のリンクをご覧ください。

【Java入門】Java8のラムダ式の使い方とメリットとは(Stream API)
更新日 : 2018年10月29日

メソッド参照とは

すでに定義済みのメソッドを、引数なしで呼び出せるのがメソッド参照です。

ラムダ式と同じくJava8から導入された機能で、基本形は下記のとおりです。

クラス名::メソッド名

メソッド参照の使い方

メソッド参照の使い方について、要素の値を表示する基本的な例から、引数が複数ある場合や戻り値を返す場合など応用的な例についても確認していきましょう。

ラムダ式での呼び出しについて

ラムダ式でメソッドを呼び出す方法について、サンプルコードで確認してみましょう。

import java.util.ArrayList;
 
public class Sample1 {

    public static void main(String args[]) {
        ArrayList<Integer> list = new ArrayList<>();
 
        for(int i = 0 ; i < 10 ; i++) {
            list.add(i);
        }
        
        // ラムダ式
        list.forEach(i -> System.out.print(i));
    }

}

実行結果:

0123456789

このサンプルコードでは、ラムダ式でメソッドを呼び出しています。

メソッド参照での呼び出しについて

先ほどのサンプルコードをメソッド参照で書き換えてみましょう。

import java.util.ArrayList;
 
public class Sample2 {

    public static void main(String args[]) {
        ArrayList<Integer> list = new ArrayList<>();
 
        for(int i = 0 ; i < 10 ; i++) {
            list.add(i);
        }
        
        // メソッド参照
        list.forEach(System.out::print);
    }

}

実行結果:

0123456789

ずいぶんすっきりした感じになります。

引数が複数の場合の扱い方について

引数が2つ以上の場合について、サンプルコードで確認していきましょう。

メソッド参照やラムダ式の記述を使う場合は、引数と戻り値の型が一致する関数型インターフェースのオブジェクトに代入します。

import java.util.Comparator;

public class Sample3 {
    
    public static void main(String args[]) {
        Comparator<Integer> comp = Integer::compare;
        System.out.println(comp.compare(1, 2));
    }
    
}

実行結果:

-1

このサンプルコードでは、従来はInteger.compare()と記述しているコードをメソッド参照を使ってInteger::compareと記述しています。

戻り値の扱い方について

戻り値を持つメソッドのメソッド参照の呼び出しについて、サンプルコードで確認していきましょう。

import java.util.function.IntSupplier;

public class Sample4 {
    
    public static void main(String args[]) {
        String str = "Hello";
 
        IntSupplier is = str::length; // メソッド参照
        System.out.println(is.getAsInt());
    }
    
}

実行結果:

5

このサンプルコードでは、従来はstr.length()と記述しているコードをメソッド参照を使ってstr::lengthと記述しています。

関数型インタフェースIntSupplierのオブジェクトisに戻り値を代入しています。

そしてgetAsIntメソッドを使って戻り値を取得しています。

なお、関数型インタフェースIntSupplierはパッケージjava.util.functionに含まれています。

パッケージjava.util.functionには、ラムダ式やメソッド参照のターゲットとなる型が含まれます。

str::lengthはint型を返すのでIntSupplierを使用しています。

他にもLongSupplierDoubleSupplierBooleanSupplierなどが用意されています。

コンストラクタ参照

メソッド参照と同じように、クラスのコンストラクタを参照することをコンストラクタ参照といい、戻り値としてオブジェクトを返します

基本形は下記のとおりです。

クラス名::new

サンプルコードで確認していきましょう。

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
 
class Sample4 {
    public static void main(String args[]) {
 
        // コンストラクタ参照
        Supplier<ArrayList<Integer>> supplier = ArrayList::new;
        List<Integer> list = supplier.get();
        
        for(int i = 0 ; i < 10 ; i++) {
            list.add(i);
        }
        
        list.forEach(System.out::print);
    }
}

実行結果:

0123456789

このサンプルコードでは、ArrayList::newによってArrayList型のオブジェクトを生成し、supplier.get()でList型のオブジェクトを取得しています。

コンストラクタについて詳しく知りたい方へ

この記事で使用した、コンストラクタの基本的な使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

【Java入門】コンストラクタの使い方総まとめ(クラス/インスタンス)
更新日 : 2019年4月8日

メソッドの使い方総まとめ(呼び出し、引数、戻り値)

この記事では紹介しきれなかったメソッドのいろいろな使い方を次の記事にまとめているので、ぜひ確認してください!

【Java入門】メソッドの使い方総まとめ(呼び出し、引数、戻り値)
更新日 : 2019年11月13日

まとめ

この記事ではメソッド参照について解説しました。

メソッド参照を使うと、Java8以前と比較してシンプルなコードが書けるようになります。

今はピンとこないかもしれませんが利用シーンが広がりつつあるので、今のうちに慣れておくことをおススメします。

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

本多 農

本多 農

関西在住のITエンジニアです。普通の会社に勤務しながら、侍エンジニアのインストラクター、ライターとして活動しています。