gpt4 book ai didi

java - 用 Java 编写函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:07 24 4
gpt4 key购买 nike

我正在为我们创建的 API 编写演示代码,但我一直遇到同样的问题,我一遍又一遍地重复自己的问题,令人作呕。我痛苦地意识到 Java 计划添加闭包,但我现在无法访问它们。这是我想在它自己的小角落里重复的地方:

public BarObj Foo(Double..._input){
try{
//things that vary per function
//but everything else...
} catch(NullException _null){
m_Logger.error("Null error exception caught in Blah::Foo");

return null;
} catch(Exception ex){
m_Logger.error( ex.getMessage() );

return null;
}
}

关于我想解决这个问题的唯一方法是将 Method 传递给一个带有 try-catch 逻辑的函数,并将其全部包装在另一个函数中,如下所示:

public BarObj MyFunc(Double..._input){
return compose("MyLogic",_input);
}

private BarObj MyLogic(Double..._input)
throws Exception{
//stuff
}

但它看起来很丑并且带有很多样板。在 Java 中有更简单的方法来组合函数吗?

最佳答案

在 Java 中这是非常困难的,因为没有对函数的一流支持(不像 clojure 或 scala,可能还有其他)。

但是,您可以封装对象中的操作:

interface Function<R, T> {

R call(T... input);
}

然后将 Foo 重构为:

static <R, T> R runFunction(Function<R, T> function, T ... input){
try{
return function.call(input);
} catch(NullPointerException _null){
m_Logger.error("Null error exception caught in Blah::Foo");
return null;
} catch(Exception ex){
m_Logger.error( ex.getMessage() );
return null;
}
}

测试用例:

class SumDoubles implements Function<Double, Double> {

@Override
public Double call(Double... input) {
Double sum = 0.0;

for (Double d : input) {
sum += d;
}

return sum;
}
}

@Test
public void sum() {
Double sum = runFunction(new SumDoubles(), 1.0, 2.0, 3.0);
assertThat(sum, is(6.0));
}

关于java - 用 Java 编写函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2207877/

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