我收到一个错误,程序中有这个结构
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 }
错误指向Circle扩展Shapes < T >类,其中指出“ T无法解析为类型”。如果将T设置为字符串,错误将消失,但这也意味着我只能使用一种数据类型。我应该在<>中放入什么,以便可以使用任何数据类型(字符串,整数,双精度型等),或者这样做是错误的?
有两个不同的概念。当你写
public class ShapeAction<T>
这意味着您正在创建一个类,该类在实例化时将被某个类参数化。您不知道当时的情况,因此您将其称为T。
T
但是当你写
public class Circle extends ShapeAction<T>
这意味着您想Circle成为ShapeAction类型为参数化的子类T。但是什么T呢?编译器无法告诉您:您声明时Circle没有任何类型变量。
Circle
ShapeAction
您有两个选择。您也可以使Circle通用:
public class Circle<T> extends ShapeAction<T>
这样,当您创建新实例时,Circle可以指定它使用的类型,并且扩展到超类。
如果要指定ShapeAction可以是任何类型,但又不使子类通用,该怎么办?用途Object:
Object
public class Circle extends ShapeAction<Object>
这种方式Circle保持非通用性,但是您可以在超类中使用任何数据类型。