java - 泛型代码中的错误扩展数字超整数?

标签 java generics point

此代码中有错误,但我不知道如何改正它:

public class Point<T extends Number super Integer>{
}

最佳答案

Super 仅对通配符有效,对命名类型参数无效。

让我们假设编译器允许这样做。只有两种类型可以说是扩展 Number 并且是 Integer 的父类(super class)型,它们是 Number 和 Integer。

我正在努力了解这样做而不是使用带有 int 字段的简单的非泛型 Point 类型会给您带来什么好处。

如果实际情况涉及更多,并且您想要一个可以使用 double 、整数等的通用点,当然,如果数字限制有助于避免错误,请使用 T extends Number。

但是,仅让 T extends Number 并不能让您访问 +、-、* 等。您可能需要类型类模式,这涉及从泛型类型的点传递一个单独的操作字典被创建到数字操作发生的地方。

例如,

interface NumericOperations<T extends Number> {
    T plus(T x, T y);
    T subtract(T x, T y);
    T multiply(T x, T y);
    ...
}

您需要定义该类型类的实例,例如,public static final NumericOperations intOperations = new NumericOper.......;

..并在 Point 的方法中传递这些实例以获取加号、减号等。

关于java - 泛型代码中的错误扩展数字超整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12640953/

相关文章:

java - 单元测试旨在检查特定故障,但即使抛出了预期的异常,它仍然失败?

java - ByteBuffer 中的 NullPointerException

java - 通用 JNI 类型实例化

java - 通用链表 - 如何添加不同的对象

opengl - 如何改变 OpenGL glBegin(GL_POINTS) 中的点大小?

java - JBoss 启动 java.io.FileInputStream 初始化 AbstractKernelController 时出错

java - 当构造函数初始化参数时从泛型类创建实例

java - 将唯一的随机点添加到数组中

python - GeoDjango:如何从中心点创建 10 公里 x 10 公里大小的边界框

java - 用 swagger 隐藏 api 模型属性