Java泛型扩展了类参数
我收到一个错误,我的程序中有这个结构Java泛型扩展了类参数,java,generics,extends,Java,Generics,Extends,我收到一个错误,我的程序中有这个结构 public interface Shapes<T>{ //methods here } public class ShapeAction<T> implements Shapes<T>{ //Methods and implementations here } public class Circle extends ShapeAction<T>{ //Some methods here } 公共界面形状
public interface Shapes<T>{
//methods here
}
public class ShapeAction<T> implements Shapes<T>{
//Methods and implementations here
}
public class Circle extends ShapeAction<T>{
//Some methods here
}
公共界面形状{
//这里的方法
}
公共类ShapeAction实现形状{
//这里的方法和实现
}
公共类圈扩展形状{
//这里有一些方法
}
错误是指向类Circle extends Shapes,其中表示“T无法解析为类型”。如果我将T设置为string,错误将消失,但这也意味着我只能使用一种数据类型。我应该在中添加什么以便可以使用任何数据类型(字符串、int、double等),还是我这样做的方式不对?您尝试过吗
public class Circle<T> extends ShapeAction<T>{
//Some methods here
}
将导致编译器将代码解释为:
public class Circle<Integer> extends ShapeAction<Integer>{
//Some methods here
}
public类循环扩展了ShapeAction{
//这里有一些方法
}
依此类推,对于类层次结构的其余部分
因此,如果您没有在类
圆圈中定义类型T
。编译器没有办法告诉我们ShapeAction的参数化类型,这很可能是问题的根源。您没有向我们展示足够的代码来告诉我们您想要实现什么,但一般来说:
如果要生成一个可以接受多种类型参数的方法,则需要参数化该方法,而不是整个类
public <T> Shape takeAction(T argument);
public-Shape-takeAction(T参数);
显然,这并没有提供太多编译时类型安全性,您可能仍然需要在运行时手动将参数解析为某些受限类型的子集。有两个不同的概念。当你写作时
public class ShapeAction<T>
public class Circle extends ShapeAction<T>
这意味着您希望Circle
成为ShapeAction
的子类,并使用类型T
参数化。但是什么是T
?编译器无法判断:您声明了圈
,但没有任何类型变量
你有两个选择。您也可以将圆设置为通用:
public class Circle<T> extends ShapeAction<T>
这样,Circle
保持非泛型,但可以在超类中使用任何数据类型。在Shapes和ShapeAction中使用T的位置是什么?谢谢,但我想问一下,为什么我需要在类Circle中定义另一个?我认为类Circle已经扩展了ShapeAction,它有这样的功能?@dimas它根本不以这种方式工作,参数化类型并不像您所暗示的那样被继承。您好,谢谢您的回答,我只是在尝试泛型和多态性。但我在这两个类中插入的方法不多,包括接口。我只是想看看我是否可以扩展类Circle的功能和ShapeAction的功能,它有类型。我想如果我这样做,我可以使用ShapeAction中的方法,它有类型,我可以显式地声明它们在Circle类中应该是什么类型。
public class Circle<T> extends ShapeAction<T>
public class Circle extends ShapeAction<Object>