3

Javaジェネリックを使用して式の問題を解決することについて、次の論文を読んでいました。

http://www.daimi.au.dk/~madst/ecoop04/main.pdf

著者は、左右のパラメーターが EvalExp 型であることを保証するために F-Bounded 型を使用する最初のソリューションを提案します。

F-Bounded 型を使用せずに問題を解決しようとしたところ、次のようなコードになりました。

public interface Exp {
    void print();
}

public class Lit implements Exp {
    public int value;
    Lit(int value) { this.value = value; }
    public void print() { System.out.print(value); }
}

public class Add<C extends Exp> implements Exp {
    public C left, right;

    public Add(final C left, final C right) {
        this.left = left;
        this.right = right;
    }

    @Override
    public void print() {
        left.print(); System.out.print("+"); right.print();
    }
}

public interface EvalExp extends Exp {
     int eval();
}

public class EvalLit extends Lit implements EvalExp {
    public EvalLit(int value) { super(value); }

    @Override
    public int eval() { return value; }
}

public class EvalAdd<A extends EvalExp> extends Add<A> implements EvalExp {

    public EvalAdd(A left, A right) {
        super(left, right);
    }

    @Override
    public int eval() {
        return left.eval() + right.eval();
    }
}

このソリューションは式の問題を解決しますか (新しいデータと操作に拡張可能ですか)?

コード レベルの拡張性を満たしていますか (詳細については論文を参照してください)。

上記のソリューションには、論文で提案されている F-Bounded ソリューションよりも不利な点がありますか?

どんな説明でも大歓迎です。

編集: コンパイルの問題を修正するためにコードを更新しました。

4

0 に答える 0