2011-12-24 13 views
2

私は次の回答をpassing function as parameterについて読んでいます。Java - パラメータとしての機能

まだ、私は考えていません。私は理解されているように私には、例えば、インターフェイスを作成することができ、罪(x)は、COS(X)など

:My機能は、任意の関数を得ることができます

public interface functionI<T> { 

} 

それを包むだろうと。

今、私は私の機能を持っている:

public void needToDo(functionI<Integer> a, int x0Par, int hPar){ 
} 

(私は罪を得た場合needToDoは、例えば、機能のn x0parとHPARのXをsubstitue、マックスを見つける必要がある(x)は、私は。

私は自分の関数でどのように使用するのか分かりませんでした。関数を取得したときにどうすればいいのか分かりますか?何か(多項式、sin(x)など)

+3

あなたのインターフェイスには現在問題がありません...そして、私たちは 'needToDo'が達成するために何を意味するのかわかりません。 –

+0

@JonSkeet私はそれを編集します。 –

+0

この投稿を見るhttp://stackoverflow.com/questions/2186931/java-pass-method-as-parameter –

答えて

5

このようなもの:

public interface Function1<RESULT,INPUT> { 
    RESULT call(INPUT input); 
} 

public class Sin implements Function1<Double,Double> { 
    public static final Sin instance = new Sin(); 
    private Sin() { 
    } 
    public Double call(Double x) { 
     return Math.sin(x); 
    } 
} 

public Double needToDo(Function1<Double,Double> aFunction, Double x0Par, Double hPar) { 
    Double d1 = aFunction.call(x0Par); 
    Double d2 = aFunction.call(hPar); 
    return d1 > d2 ? d1 : d2; 
} 

public static void main(String[] args) { 
    Double x0Par = 10.2; 
    Double hPar = 1.9; 
    Double ret = needToDo(Sin.instance, x0Par, hPar); 
    System.out.println(ret); 
} 
3

これはあまりうまく動作しません。 Javaではパラメータとして任意の関数を渡すことはできません。特定の、しばしば一般的な発音関数を持つオブジェクトを渡します。

したがってexecuteメソッドを持つMathOperationインターフェイスを定義し、doubleを返してdoubleを返すことができます。

public interface MathOperation { 
    double execute(double x); 
} 

、その後、あなたはあなたが

よう needToDoためのオンザフライ機能を作成することができ

public class Sin implements MathOperation { 
    public double execute(double x) { return Math.sin(x); } 
} 

を作成し、

public void needToDo(MathOperation op, double x) { 
    System.out.println(op.execute(x)); 
} 

のようにそれを使用する機能を持たせることができます

... 
needToDo(new MathOperation() { 
    public double execute(double x) { return x * 2.0; } 
}); 
... 

しかし、Math.sinをパラメータとして渡すことはできません。あなたが行うことができるリフレクショントリックがありますが、それは別の問題です。

関連する問題