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 に答える