2016-04-24 8 views
1

私はプログラムを書いています。メソッドを別のメソッドのパラメータとして渡すことができるかどうかを知りたいと思います。たとえば、次のようなものがあります。メソッドをパラメータとしてメソッドに渡す方法はありますか?

public boolean update(Method m){ //input is a method 
    int i = m.execute(); 
    // logic relating to the value of i 
} 

私はこれをjavaで実行できるかどうかを知りたいと思います。私は現在、関数型プログラミングとReflectionについて現在読んでいます。

+1

Java 8を使用できますか?ラムダ式のサポートが追加されているため、関数型プログラミングがずっと簡単になります。そうでなければ、リフレクションはあなたが求めていることをする方法です。 –

+0

私はあなたの質問から、あなたがそれを試してみるための簡単なプログラムを作成しようとしていないということを集めていますか?それがうまくいかなくても、コードを書いてテストし、その結果について教えてくれると、より良い質問ができます。 http://stackoverflow.com/help/mcve –

+0

はい。 Lambdaは非常に便利で、Javaでいくつかの関数型プログラミング機能を提供しています。 – Logan

答えて

2

これはリフレクションとは関係ありませんが、java 8+を使用している場合は「メソッド参照」を渡すことができます。あなたがこれを行うことができ、あなたがパラメータを取らず、単にint型を返すメソッドを使用することをあなたの例から想定すると:

public class MyClass { 
    public int getIntMemberFunction(){ ... } 
    public static int getIntStaticFunction(){ ... } 
} 

あなたの更新機能で、このように見えるように変更され、

public boolean update(IntSupplier s){ //input is a method reference or lambda 
    int i = s.get(); 
    // logic relating to the value of i 
} 

その後あなたはこのように、限り、それはパラメータを取らず、intを返し、任意のクラスの任意の静的関数への参照を渡しupdateを呼び出すことができます。

boolean result = update(MyClass::getIntStaticFunction); 

またはyあなたが1つのまたは2のパラメータを取るメソッドを追加したい場合は

MyClass myClassInstance = ... 
boolean result = update(myClassInstance::getIntMemberFunction); 

:OUはこのように、限り、それはパラメータを取らず、int型を返すように、特定のオブジェクトのいずれかのメンバ関数への参照を渡しupdateを呼び出すことができますのバージョンを作成して、ToIntFunctionまたはToIntBiFunctionとすることができます。 2つのパラメータを超えると、独自の機能インタフェースを追加する必要があります。

0

インターフェイスを使用する方法の1つです。 Javaでは、特定のインタフェースを実装するオブジェクトを関数の引数として渡すことができるため、そのオブジェクトに対してそのメソッドを呼び出すことができます。 Python、Swift、Javascriptなどの最新の言語は、このイディオムをよりよくサポートしています。

関連する問題