这就是我想做的事情:
我希望有一个抽象类Operation
实现Function
接口,然后让类似OpA
的子类继承它。 Operation
是从Function
到Integer
的{{1}},我希望能够使用Integer
和Function.compose
撰写Function.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)
到Function
的{{1}},但我无法将其转换为Integer
。运行时抛出Integer
:
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
函数(但我不知道如何),尽管我们总是欢迎整齐的修复
答案 0 :(得分:1)
如果您想要实现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