Java 为什么使用F-Bounded类型在现有类型层次结构上添加新方法
我正在阅读以下关于使用Java泛型解决表达式问题的文章 作者提出了第一种解决方案,使用F-有界类型来确保左参数和右参数的类型为EvalExp 我试图在不使用F-有界类型的情况下解决这个问题,最后得到了下面的代码,看起来很有效Java 为什么使用F-Bounded类型在现有类型层次结构上添加新方法,java,generics,f-bounded-polymorphism,Java,Generics,F Bounded Polymorphism,我正在阅读以下关于使用Java泛型解决表达式问题的文章 作者提出了第一种解决方案,使用F-有界类型来确保左参数和右参数的类型为EvalExp 我试图在不使用F-有界类型的情况下解决这个问题,最后得到了下面的代码,看起来很有效 public interface Exp { void print(); } public class Lit implements Exp { public int value; Lit(int value) { this.value = va
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();
}
}
公共接口Exp{
作废打印();
}
公共类{
公共价值观;
Lit(int值){this.value=value;}
public void print(){System.out.print(值);}
}
公共类Add实现Exp{
公共C左,右;
公共添加(最后C左,最后C右){
this.left=左;
这个。右=右;
}
@凌驾
公开作废印刷品(){
left.print();System.out.print(“+”);right.print();
}
}
公共接口EvalExp扩展{
int eval();
}
公共类EvalLit扩展了Lit实现EvalExp{
公共EvalLit(int值){super(value);}
@凌驾
public int eval(){返回值;}
}
公共类EvalAdd扩展了Add实现EvalExp{
公共评估(左、右){
超级(左、右);
}
@凌驾
公共内部评估(){
返回left.eval()+right.eval();
}
}
此解决方案是否解决了表达式问题(是否可扩展用于新数据和操作)
是否满足代码级可扩展性(有关详细信息,请参阅论文)
与本文提出的F-有界解相比,上述解是否有任何缺点
欢迎任何解释
编辑:更新代码以修复编译问题 代码无法编译。它应该是
公共类Add implements Exp{
(而不是C extends Eval
)吗?