我有一个这样的课程:
public class SpiralGenerator<E extends Number> implements Iterator<List<E>> {
private void generate(int pos, E... array) {
if (pos == array.length) {
List<E> list = new ArrayList<>();
list.addAll(Arrays.asList(array));
currentResults.add(list);
return;
}
generate(pos + 1, array);
array[pos] = -array[pos];
}
}
然而,它不允许array[pos] = -array[pos]
。如果我使用Integer
代替E extends Number
,则可以正常使用。
错误讯息:
bad operand type E for unary operator '-'
where E is a type-variable:
E extends Number declared in class SpiralGenerator
为什么当前的方法不起作用,我该如何解决?
答案 0 :(得分:4)
基本上,Number
没有任何“给我负面价值”的操作 - 这就是你想要的。
您可以编写自己的方法,这种方法特别包含您感兴趣的各种数字 - 但您不能只使用-
运算符。该方法非常难看,并且不具有证明类型安全性。它可能就是你所拥有的一切。
答案 1 :(得分:2)
使用你的代码,你依靠拳击/拆箱。所有Number
类都不支持此功能(例如BigInteger
)。
因此编译器不允许这样做。