gpt4 book ai didi

java - 如何高效地在java类中制作函数指针?

转载 作者:行者123 更新时间:2023-12-01 20:27:08 25 4
gpt4 key购买 nike

在进行Java编程时,我有一个问题如下。

下面是c++代码。如您所知,SomParam 类 中的变量Alpha 是函数指针。当用户在构造函数中将函数地址设置为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版本。我知道接口(interface)可能能够取代 Java 中的函数指针,但我无法将其应用到我的代码中。如何将上面的转换成java版本?

诗。我希望您不要使用 lambda 表达式,因为我使用的是 Java 7。

最佳答案

我建议创建一个策略模式枚举来实现这两个函数并将其直接传递到构造函数中:

public enum AlphaType {
LIN_ALPHA {
@Override
public double compute(double alpha_0, int t, Subscript rlen, double C) {
// FIXME t / rlen isn't valid in Java
return alpha_0 * (1.0 - (double) t / rlen);
}
},

INV_ALPHA {
@Override
public double compute(double alpha_0, int t, Subscript rlen, double C) {
//double C = rlen / INV_ALPHA_CONST;
return alpha_0 * C / (C + t);
}
};

public abstract double compute(double alpha_0, int t, Subscript rlen, double C);
}

关于java - 如何高效地在java类中制作函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43729336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com