gpt4 book ai didi

java - 将组合函数转换为函数的子类

转载 作者:行者123 更新时间:2023-11-30 10:20:58 26 4
gpt4 key购买 nike

这是我想做的:

我想要一个抽象类Operation实现Function接口(interface),然后让OpA这样的子类继承它。 Operation 是从IntegerIntegerFunction,我希望能够使用Function。 composeFunction.andThen 组成 OpA。在代码中:

public abstract class Operation implements Function<Integer, Integer>
{
// ...
}
public class OpA extends Operation
{
// ...
}
public class Main
{
public static void main(String[] args)
{
OpA a = new OpA();
OpA b = new OpA();

// vvv Problem here vvv
Operation compose = (Operation) a.andThen(b);
}
}

问题是,尽管 a.andThen(b) 是一个从 IntegerIntegerFunction,我无法将其转换为 Operation。在运行时抛出 java.lang.ClassCastException:

Caused by: java.lang.ClassCastException: java.util.function.Function$$Lambda$56/1571051291 cannot be cast to operation.Operation
at application.Main.main(Main.java:25)

老实说,一开始我并没有真正期望它能像那样工作,但出于我的目的,我确实需要将组合函数作为 Operation。因此,对于我的问题,我正在寻求一种方法,使函数组合返回一个与 Operation 类型兼容的对象。任何有效的东西都很好:如果需要,我愿意编写自己的 composedandThen 函数(但我不知道该怎么做),尽管一个巧妙的修复是永远欢迎。

最佳答案

好吧,如果你想实现一个Sum,可以这样做:

static class Sum extends Operation {

@Override
public Integer apply(Integer x) {
return x + 1;
}

public Operation andThen(Operation after) {
return new Operation() {
@Override
public Integer apply(Integer x) {
return after.apply(Sum.this.apply(x));
}
};
}
}

调用它:

Sum a = new Sum();
Sum b = new Sum();

Operation composed = a.andThen(b);
System.out.println(composed.apply(2)); // 4

关于java - 将组合函数转换为函数的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48059667/

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