我有以下课程:
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;
}
}
但此语法无效。 你能告诉我如何纠正我的班级声明吗?
答案 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>
并完全覆盖。