我有一个使用了一段时间的自定义界面,看起来像这样:
public interface Function<T, R> {
R call(T input);
}
我想用 JavaFunction
和 Guava来改造这个接口Function
,同时保持它的FunctionalInterface
. 我以为我有完美的安排:
@FunctionalInterface
public interface Function<T, R> extends
java.util.function.Function<T, R>,
com.google.common.base.Function<T, R> {
R call(T input);
@Override
default R apply(T input) {
return call(input);
}
}
两个超接口都声明了相同的apply()
方法,这个方法已经在我的接口中实现了,只留下抽象call()
方法。奇怪的是,它不会编译,告诉我
'@FunctionalInterface' 注释无效;Function<T,R> 不是函数式接口
更奇怪的是,以下变体编译得很好:
@FunctionalInterface
public interface Function<T, R> extends
java.util.function.Function<T, R> {
R call(T input);
@Override
default R apply(T input) {
return call(input);
}
}
@FunctionalInterface
public interface Function<T, R> extends
com.google.common.base.Function<T, R> {
R call(T input);
@Override
default R apply(T input) {
return call(input);
}
}
public interface Function<T, R> extends
java.util.function.Function<T, R>,
com.google.common.base.Function<T, R> {
R call(T input);
@Override
default R apply(T input) {
return call(input);
}
}
@FunctionalInterface
public interface Function<T, R> extends
java.util.function.Function<T, R>,
com.google.common.base.Function<T, R> {
@Override
R apply(T input);
}
第一个版本无法编译是否有原因?