dim*_*mas 2 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
}
Run Code Online (Sandbox Code Playgroud)
错误指向类Circle扩展Shapes < T >,其中显示"T无法解析为类型".如果我将T设置为字符串,则错误将消失,但这也意味着我只能使用一种数据类型.我应该把什么放在<>中,以便我可以使用任何数据类型(String,int,double等)或者我做错了吗?
有两个不同的概念.当你写作
public class ShapeAction<T>
Run Code Online (Sandbox Code Playgroud)
这意味着您正在创建一个类,在实例化时,将使用某个类进行参数化.你当时不知道它会是什么,所以你就像它一样T
.
但是当你写作
public class Circle extends ShapeAction<T>
Run Code Online (Sandbox Code Playgroud)
这意味着您希望Circle
成为ShapeAction
参数化类型的子类T
.但是什么T
呢?编译器不能告诉你:你声明Circle
没有任何类型变量.
你有两个选择.你也可以使Circle成为通用的:
public class Circle<T> extends ShapeAction<T>
Run Code Online (Sandbox Code Playgroud)
这样,当您创建一个新实例时,Circle
请指定它使用的类型,并且这将扩展到超类.
如果你想指定ShapeAction可以是任何类型,但不使子类通用,该怎么办?用途Object
:
public class Circle extends ShapeAction<Object>
Run Code Online (Sandbox Code Playgroud)
这种方式Circle
保持非泛型,但您可以将任何数据类型与超类一起使用.