小编Bel*_*ose的帖子

从特定的表达式树到通用的表达式 - java

我想编写一个抽象类'Expression',它接受Integer或Boolean表达式,并通过子类来评估它们,如'Add','Divide'代表Integer,'And','Or'代表布尔表达式.最后,它归结为编写实现自己的evaluate()方法的子类.我在一本书中找到了一个实现,但它只适用于双值.这里是:

abstract class Expr {
    abstract double eval();
}
abstract class BinOp extends Expr {
    Expr left;
    Expr right;
    BinOp(Expr l, Expr r) {
    }
}
class Const extends Expr {
    private double value;
    Const( double val ) {
        this.value = val;
    }
    double eval () {
        return this.value;
    }//eval
}
Run Code Online (Sandbox Code Playgroud)

现在,对于BinOp类,我可以编写一个扩展它的类'Add',调用它的构造函数并使用2个Const对象的乘法实现eval(),eval()本身只是返回它们实例化的值.

如果我想用Expr来完成它,如果我没有严格限制求值为double,而是使用int或boolean?我已经阅读了泛型,但我似乎无法正确设计类似Expr的类,以便我的代码编译.这是我的尝试:

public abstract class Expression<T> {
    abstract T evaluate();
}
public class Const<T> extends Expression{
    private T n;
    public Const(T x) { n = x; }
    public Const<Integer> …
Run Code Online (Sandbox Code Playgroud)

java generics

5
推荐指数
1
解决办法
57
查看次数

标签 统计

generics ×1

java ×1