2016-04-26 4 views
0

私は簡単なメニュー表示を作成しています。 My Menuクラスは、MenuOptionオブジェクトのListを作成し、これらを表示および選択することができます。プログラマは、addOptionメソッドを使用して、MenuクラスのoptionListにオプションを追加できます。任意のメソッドをJavaの別のメソッドに関連付けますか?

は、私は何をすることができるようにしたいことは、プログラマは、特定のオプションを使用して彼または彼女の他のクラスのいずれかから任意のメソッドを関連付けることができるようにそれを作るです。その後、addOptionメソッドは次のようなものだろう

menu.addOption("Print a roster", roster.print()); 

optionList.add(new MenuOption("Print a roster", roster.print())); 

をしてから、今後、法名簿プログラマのようなものを入力したので、もし

は例えば、私はそれをしたいです.print()はメニューオプションテキスト "Print a roster"に関連付けられているので、ユーザーが "Print a roster"を選択した場合は、roster.print()が呼び出されます。

============================================== =

ちなみに、私はJava 8から新しいラムダ式を調べ始めましたが、どのように動作するのか、あるいは私が望む効果を得るために必要なアプローチを提供しているかはよく分かりません。

ご協力いただきありがとうございます。

答えて

1

MenuOptionコンストラクタへの2番目のパラメータはRunnableでなければならないであろう、そしてあなたは、値として

roster::print 

を供給することができるだろう。これはMethod Referenceと呼ばれ、(この場合はRunnableで)Functional Interfaceを実装するオブジェクトを作成するためだけの構文糖です。

() -> roster.print() 

ボタンでクリックすると、run()メソッドに電話する必要があります。

+0

パーフェクト!機能的なインターフェースの仕組みをもう少し見てみると、それほど問題はありませんでした。ありがとうございました。 –

+0

ああ、どうしたらよいかわからない何かが出てきました。私の任意の方法がパラメータを渡すかどうかはどうですか?たとえば、のは、それは 'roster.print()'と呼ばれることができ、または、私はそれがString []編曲:私が作成したを受け入れるようにしたい場合は、それが名簿 'と呼ばれることができるよう、印刷方法が、オーバーロードされているとしましょう。 print(arr) 'を実行します。ラムダ式にパラメータを含むprintメソッドのこのバージョンを実装することは可能ですか? –

+0

パラメータがある場合とない場合のメソッドは、全く異なる2つのメソッドです。 'String []'パラメータを持つバージョンの場合、 'MenuOption'コンストラクタは' Consumer 'を受け入れる必要があります。 ARR> roster.print( - あなたは '(ARR)ラムダを渡す必要があるかもしれないので、私は、(理論的にはそれを推測することが可能であるが、理由は曖昧で)あなたはまだメソッドのリファレンスを使用することができますかどうかわからないんだけど) '。 – herman

関連する問題