gpt4 book ai didi

Java 泛型扩展类参数

转载 作者:行者123 更新时间:2023-12-02 09:24:14 26 4
gpt4 key购买 nike

我收到错误,并且我的程序中有此结构

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 extends Shapes<T> ,其中显示“T 无法解析为类型”。如果我将 T 设置为字符串,错误就会消失,但这也意味着我只能使用一种数据类型。我应该在 <> 中放入什么,以便我可以使用任何数据类型(String、int、double 等),或者我是否以错误的方式执行此操作?

最佳答案

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

public class ShapeAction<T>

这意味着您正在创建一个类,该类在实例化时将使用某个类进行参数化。您当时并不知道它会是什么,因此您将其称为 T

但是当你写

public class Circle extends ShapeAction<T>

这意味着您希望 Circle 成为以 T 类型参数化的 ShapeAction 的子类。但是T是什么?编译器无法判断:您声明了没有任何类型变量的 Circle

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

public class Circle<T> extends ShapeAction<T>

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

如果您想指定 ShapeAction 可以是任何类型,但不使子类通用,该怎么办?使用对象:

public class Circle extends ShapeAction<Object>

这样 Circle 保持非泛型,但您可以在父类(super class)中使用任何数据类型。

关于Java 泛型扩展类参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11655280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com