此代码中有错误,但我不知道如何改正它:
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/