小编典典

Java泛型扩展了类参数

java

我收到一个错误,程序中有这个结构

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设置为字符串,错误将消失,但这也意味着我只能使用一种数据类型。我应该在<>中放入什么,以便可以使用任何数据类型(字符串,整数,双精度型等),或者这样做是错误的?


阅读 260

收藏
2020-11-26

共1个答案

小编典典

有两个不同的概念。当你写

public class ShapeAction<T>

这意味着您正在创建一个类,该类在实例化时将被某个类参数化。您不知道当时的情况,因此您将其称为T

但是当你写

public class Circle extends ShapeAction<T>

这意味着您想Circle成为ShapeAction类型为参数化的子类T。但是什么T呢?编译器无法告诉您:您声明时Circle没有任何类型变量。

您有两个选择。您也可以使Circle通用:

public class Circle<T> extends ShapeAction<T>

这样,当您创建新实例时,Circle可以指定它使用的类型,并且扩展到超类。

如果要指定ShapeAction可以是任何类型,但又不使子类通用,该怎么办?用途Object

public class Circle extends ShapeAction<Object>

这种方式Circle保持非通用性,但是您可以在超类中使用任何数据类型。

2020-11-26