1

我有这样的课:

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

为什么当前的方法不起作用,我该如何解决?

4

2 回答 2

4

基本上,Number没有任何类型的“给我负值”操作——这就是你想要的。

您可以编写自己的方法,对您感兴趣的每种数字进行特殊处理——但您不能只使用-运算符。该方法将非常丑陋,并且不能证明是类型安全的。这可能是你所拥有的一切。

于 2013-08-06T07:53:40.867 回答
2

使用您的代码,您依赖于装箱/拆箱。并非所有Number类都支持这一点(例如BigInteger)。

因此编译器不允许这样做。

于 2013-08-06T07:52:12.133 回答