为了测试函数接口函数的compose()和andThen()方法,我做了一个简单的代码:
public class Test {
public Trans testCompose() {
return new T1().compose(new T2());
}
}
interface Trans extends Function<File, File> {
}
class T1 implements Trans {
@Override
public File apply(File file) {
return null;
}
}
class T2 implements Trans {
@Override
public File apply(File file) {
return null;
}
}
但是你可以看到这段代码无法编译。 给定原因:没有类型变量(v)V的实例存在,因此函数符合Trans。
关于扩展名和超级通配符之间的差异multiple subjects我理解它们在列表中的使用,但不确定为什么它不能在这里编译。
有没有办法在方法testCompose()中继续返回对象Trans,还是必须返回一个Function来让代码编译?
答案 0 :(得分:4)
不,这段代码不正确。 testCompose()
返回的对象未实现Trans
;它是一个匿名的lambda帮助器类型,不能转换为Trans
。
testCompose()
方法应声明为返回Function<File, File>
,因为这是唯一实现的接口。