java 8中从函数继承的命名具体接口

java 8中从函数继承的命名具体接口,java,inheritance,types,java-8,alias,Java,Inheritance,Types,Java 8,Alias,我有很多地方有功能。我基本上想将其命名为脚变压器。我的第一次尝试是。 这与 错误:(93,39)java:不兼容的类型:不存在类型变量V的实例,因此java.util.function.function符合org.broadinstitute.hellbender.tools.walkers.bqsr.ReadTransformerTest.foottransformer 通过将脚变压器修改为过载,然后编译并运行我的代码 interface FooTransformer extends Fun

我有很多地方有
功能
。我基本上想将其命名为
脚变压器
。我的第一次尝试是。

这与

错误:(93,39)java:不兼容的类型:不存在类型变量V的实例,因此java.util.function.function符合org.broadinstitute.hellbender.tools.walkers.bqsr.ReadTransformerTest.foottransformer

通过将脚变压器修改为过载,然后编译并运行我的代码

interface FooTransformer extends Function<Foo,Foo> {
    default FooTransformer andThen(FooTransformer after){
        return Function.super.andThen(after)::apply;
    }
}
接口脚变压器扩展功能{
默认脚变压器,然后(脚变压器后){
返回函数.super.和第(后)::应用;
}
}
现在我得到了这个警告(使用JavaC1.8.0_25和--Xlint:all)

警告:[过载]和脚变压器中的第二个(脚变压器)为 与中的andThen(函数)可能不明确 作用 默认脚变压器,然后(脚变压器后){ ^ 其中V、R、T为类型变量: V扩展方法中声明的对象,然后(Functionextends V>) R扩展接口函数中声明的对象 T扩展接口函数中声明的对象


我真正想要的是
函数的类型别名,这是我所能得到的最接近的类型别名。有没有更好的方法在没有警告的情况下实现这一点?

我不知道您使用了哪种编译器,因此我无法测试我提出的解决方案是否能解决您的警告。您得到警告的原因是因为ode>和
方法与继承的方法函数非常相似。和方法,但不重写它。一种可能的解决方案是显式重写方法函数。还有:

interface FooTransformer extends Function<Foo,Foo> {

    @Override
    public default <V> Function<Foo, V> andThen(Function<? super Foo, ? extends V> after) {
        return Function.super.andThen(after);
    }
    default FooTransformer andThen(FooTransformer after){
        Objects.requireNonNull(after);
        return foo -> after.apply(apply(foo));
    }
}
接口脚变压器扩展功能{
@凌驾

公共违约函数(FunctionI使用Java1.1.0x25。我尝试添加显式重写函数,但是它只是改变警告,因为它现在与FooRealter中的定义不一致。有趣的是性能方面的问题。我肯定会考虑这个问题。谢谢您指出UNIAL运算符。这肯定是M的正确类。在这种情况下,e将从中继承。我不知道这一点。我应该补充一点,这个警告只显示在--Xlint:all中。
interface FooTransformer extends Function<Foo,Foo> {
    default FooTransformer andThen(FooTransformer after){
        return Function.super.andThen(after)::apply;
    }
}
interface FooTransformer extends Function<Foo,Foo> {

    @Override
    public default <V> Function<Foo, V> andThen(Function<? super Foo, ? extends V> after) {
        return Function.super.andThen(after);
    }
    default FooTransformer andThen(FooTransformer after){
        Objects.requireNonNull(after);
        return foo -> after.apply(apply(foo));
    }
}