【发布时间】:2014-05-11 08:37:26
【问题描述】:
有人知道我为什么会收到这个错误吗?
错误:找不到符号 返回 left.evaluate() + right.evaluate(); 符号:方法评估() 位置:类型 T 的变量左侧 其中 T 是一个类型变量: T 扩展类 Operation 中声明的 Object
package expevaluator;
interface Expression<T> {
T evaluate();
}
class Constant<T> implements Expression {
private final T value;
public Constant(T value) {
this.value = value;
}
@Override
public T evaluate() {
return value;
}
}
abstract class Operation<T> implements Expression {
public T left;
public T right;
}
class Addition<T> extends Operation {
public Addition(T left, T right) {
super.left = left;
super.right = right;
}
@Override
public T evaluate() {
if(left instanceof Integer){
if(right instanceof Integer){
return super.left.evaluate() + right.evaluate();
}else{
return left.evaluate() + right.evaluate();
}
}else{
return left.evaluate() + right.evaluate();
}
}
}
编辑:
package expevaluator;
import java.util.logging.Level;
import java.util.logging.Logger;
interface Expression<T extends Number> {
T evaluate();
}
class Constant<T extends Number> implements Expression{
private final T value;
public Constant(T value) {
this.value = value;
}
@Override
public T evaluate() {
return this.value;
}
}
abstract class Operation<T> implements Expression {
public T left;
public T right;
}
class Addition extends Operation {
public Addition(Constant left, Constant right) {
super.left = left.evaluate();
super.right = right.evaluate();
}
@Override
public Number evaluate() {
String name = "expevaluator." + super.left.getClass().getSimpleName() + super.right.getClass().getSimpleName() + "Addition";
try {
Object instance;
instance = Class.forName(name).newInstance();
return (Number) instance;
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
Logger.getLogger(Addition.class.getName()).log(Level.SEVERE, null, ex);
}
/*if (super.left instanceof Integer && super.right instanceof Integer) return new IntIntAddition().evaluate((Integer)super.left,(Integer)super.right);
if (super.left instanceof Integer && super.right instanceof Double) return new IntDoubleAddition().evaluate((Integer)super.left,(Double)super.right);
if (super.left instanceof Double && super.right instanceof Integer) return new DoubleIntAddition().evaluate((Double)super.left,(Integer)super.right);
if (super.left instanceof Double && super.right instanceof Double) return new DoubleDoubleAddition().evaluate((Double)super.left,(Double)super.right);*/
return null;
}
}
class IntegerIntegerAddition{
IntegerIntegerAddition() {
}
public Number evaluate(int left, int right) {
return left + right;
}
}
class IntegerDoubleAddition {
public IntegerDoubleAddition() {
}
public Number evaluate(int left, double right) {
return left + right;
}
}
class DoubleIntegerAddition {
public DoubleIntegerAddition() {
}
public Number evaluate(double left, int right) {
return left + right;
}
}
class DoubleDoubleAddition {
public DoubleDoubleAddition() {
}
public Number evaluate(double left, double right) {
return left + right;
}
}
我已经成功了,现在我想在加法类中使用反射。
我想实例化一个类,然后调用 evaluate() 方法。
【问题讨论】:
标签: java generics arithmetic-expressions