前提・実現したいこと
Java8から実装されたメソッド参照の勉強中です。
staticなメソッドを参照する際に、::の左側をインスタンスにするとコンパイルエラーが発生する理由がわかりません。
インスタンス.staticメソッドは呼び出しが可能なのに、なぜ
インスタンス::staticメソッドはコンパイルエラーが発生するのでしょうか。
発生している問題・エラーメッセージ
Main.java:10: error: incompatible types: invalid method reference list.forEach(new Sample()::print); //インスタンスでstaticメソッドを参照 ^ unexpected static method print(Integer) found in bound lookup Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 1 error
該当のソースコード
import java.util.*; public class Main { public static void main(String[] args){ List<Integer> list = List.of(1,2,3); Sample.print(0); ////クラス指定でstaticメソッドを呼び出し list.forEach(Sample::print);//クラス指定でstaticメソッドを参照 教本通り new Sample().print(0); //インスタンスからstaticなメソッド printを呼び出し list.forEach(new Sample()::print); //この記述方法でエラーが発生する } }
試したこと
上記のコードで挙動を確認した結果、コンパイルエラーが発生しました。
###補足
paiza.ioで実行しました。
回答2件
あなたの回答
tips
プレビュー