如何使用泛型类型声明类 - Java 1.7

时间:2018-02-23 14:31:22

标签: java generics

我有以下课程:

public class AClass<T extends XYZClass> extends BFunction<DTOClass, T>{
    @Override
    public <T extends XYZClass> T apply(DTOClass input) {
        return null;
    } 
}

其中T是泛型类型,BFunction是使用apply方法实现com.google.common.base.Function的函数。问题是这个类声明构造是无效的,因为它对应于以下apply方法:

@Override
public T apply(DTOClass input) {
    return null;
}

我也尝试过:

public class AClass extends BFunction<DTOClass, <T extends XYZClass> T>{
    @Override
    public <T extends XYZClass> T apply(DTOClass input) {
            return null;
    }
}

但此语法无效。 你能告诉我如何纠正我的班级声明吗?

2 个答案:

答案 0 :(得分:4)

删除方法上声明的类型变量:

public class AClass<T extends XYZClass> extends BFunction<DTOClass, T>{
    @Override
    public /* remove this */ T apply(DTOClass input) {
        return null;
    } 
}

您正在尝试声明另一个名为T的类型变量,该变量隐藏了在类上声明的类型变量。

答案 1 :(得分:2)

您在父类中声明generic method,其中<T extends XYZClass>子句与您的类声明中的<T extends XYZClass>无关。

您可能想要做的是从方法声明中删除<T extends XYZClass>并完全覆盖。