##前提・実現したいこと
Java初心者です。現在関数オブジェクトについて学習しています。
関数オブジェクトの代入を使って、数字が奇数かどうかや、性別によって処理が変わるプログラムを作成しています。
発生している問題
奇数かどうかを判別するメソッドisOddの処理を代入する時はisOddの処理ロジックを直接代入することができるのに、性別を反映して男性ならば"Mr." + name、女性ならば"Ms." + nameという文字列を返すメソッドaddNamePrefixは一度FuncList型のインスタンスを生成し、それに代入しないと使えないという事象が発生しています。これがなぜなのかわかりません。
該当のソースコード
Java
1interface Func1 { 2 boolean call(int x); 3} 4interface Func2 { 5 String call(boolean male, String name); 6} 7public class FuncSample { 8 public static void main(String[] args) { 9 FuncList funclist = new FuncList(); 10 Func1 f1 = FuncList::isOdd; 11 Func2 f2 = funclist::addNamePrefix; 12 System.out.println(f1.call(15)); 13 System.out.println(f2.call(true, "Smith")); 14 } 15}
Java
1public class FuncList { 2 public static boolean isOdd(int x) { 3 return (x % 2 == 1); 4 } 5 public String addNamePrefix(boolean male, String name) { 6 if (male == true){ 7 return "Mr." + name; 8 }else{ 9 return "Ms." + name; 10 } 11 } 12}
##自分の認識
FuncListクラスに予め処理内容を書いておく。
Func1、Func2インターフェースを作り、それぞれのcall抽象メソッドを用意しておく。
mainメソッドで、Func1型f1を定義し、FuncListクラスのisOddメソッドの処理ロジックを代入する。
何故かわざわざFuncList型のインスタンスfunclistを生成し、Func型f2を定義し、ここにfunclistのaddNamePrefixメソッドの処理ロジックを代入する。
その後System.out.printlnでFunc1、func2インターフェースにあったcallメソッドを実装?(これが実装なのかもよくわかっていません。すみません)して、実引数を指定(15など)して結果を表示する。
インターフェースについても少し認識が間違っているかもしれません。稚拙な文章で申し訳ないです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。