Javaプログラミングでコーディングするとき、私は以下のような質問があります。効率的にJavaクラスの関数ポインタを作成するには?
以下はC++コードです。ご存知のように、のSomParam class
は、関数ポインタです。ユーザがファンクションアドレスをコンストラクタのAlpha
に設定すると、変数Alpha
は現在の関数を実行します。
double lin_alpha(double alpha_0, int t, Subscript rlen, double) {
return alpha_0 * (1.0 - (double) t/rlen);
}
double inv_alpha(double alpha_0, int t, Subscript rlen, double C) {
//double C = rlen/INV_ALPHA_CONST;
return alpha_0 * C/(C + t);
}
#define LIN_ALPHA 1
#define INV_ALPHA 2
class SomParam{
public:
typedef double Alpha(double, int, int, double);
protected:
Alpha *_alpha;
int _xdim;
int _ydim;
public:
SomParam(int AlphaType,int xdim, int ydim) {
if (AlphaType == LIN_ALPHA) _alpha = lin_alpha;
else _alpha = lin_alpha;
_xdim = xdim;
_ydim = ydim;
}
私の質問は、上記のコードをJavaバージョンに変換する方法を知りたいということです。 Javaにはポインタの概念がないので、Javaバージョンに変換するのは苦労しました。私はJavaで関数ポインタを置き換えることができるかもしれないことを知っていましたが、私のコードには適用できませんでした。 上記のものをjavaバージョンに変換するにはどうすればよいですか?
ps。私はJavaを使用しておりますので、あなたがラムダ式を使用してはならないことを願っています7.
私はJavaに関数ポインタがあるとは思わない。しかし、java8のlambdaパラメータは、関数をパラメータとして渡すように見えます。 – Tiina
Java 8を使ってみませんか?Java 7は現在かなり古くから使われていません。 –