gpt4 book ai didi

java - 如何同时实现 Function 和 BiFunction?

转载 作者:搜寻专家 更新时间:2023-10-31 08:16:39 24 4
gpt4 key购买 nike

我创建了一个 GenericFunction 类,它实现了 FunctionBiFunction。但是无法编译。

public class GenericFunction<T, U, R> implements
Function<T, R>, BiFunction<T, U, R> {

@Override
public R apply(T t, U u) {
return null;
}

@Override
public R apply(T t) {
return null;
}

}

错误信息是:

src\obscure\test\GenericFunction.java:6: error:
types BiFunction<T,U,R> and Function<T,R> are incompatible;
both define andThen(java.util.function.Function<? super R,? extends V>),
but with unrelated return types
public class GenericFunction<T, U, R> implements
^
where T,U,R are type-variables:
T extends Object declared in class GenericFunction
U extends Object declared in class GenericFunction
R extends Object declared in class GenericFunction

1 error

我该怎么做?

最佳答案

我不知道你为什么想要这样的东西,但这似乎是一个有趣的挑战......

主要问题是 Function 和 BiFunction 都实现了默认的 andThen 函数,它们都具有完全相同的签名,因此您的类不知道要调用哪个。你只需要提供你自己的实现,那么它就不再是模棱两可的了。然而,实现起来很棘手。

Java 文档说了方法:

Returns a composed function that first applies this function to its input, and then applies the after function to the result.

...所以这意味着返回一个新的 GenericFunction,其中两个应用方法现在都是组合。

我给你这个怪物:

public class GenericFunction<T, U, R> implements Function<T, R>, BiFunction<T, U, R> {

@Override
public R apply(T t, U u) {
return null;
}

@Override
public R apply(T t) {
return null;
}

@Override
public <V> GenericFunction<T, U, V> andThen(Function<? super R, ? extends V> after) {
return new GenericFunctionAndThen<>(after);
}

private class GenericFunctionAndThen<V> extends GenericFunction<T, U, V> {
private final Function<? super R, ? extends V> after;

public GenericFunctionAndThen(Function<? super R, ? extends V> after) {
this.after = after;
}

@Override
public V apply(T t) {
return after.apply(GenericFunction.this.apply(t));
}

@Override
public V apply(T t, U u) {
return after.apply(GenericFunction.this.apply(t, u));
}
}
}

这使用了我所知道的 Java 中最晦涩的特性……我什至不知道它的名字! ClassName.this 在嵌套类中用于引用封闭实例中的方法(或字段),如果该方法是 shadowed .

关于java - 如何同时实现 Function 和 BiFunction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34669586/

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