Кто-нибудь знает, почему я получаю эту ошибку?
ошибка: не удается найти символ return left.evaluate() + right.evaluate(); символ: метод Assessment() местоположение: переменная слева от типа T, где T — тип-переменная: T extends Object, объявленный в классе Operation
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;
}
}
Мне это удалось, теперь я хочу использовать отражение в классе сложения.
Я хочу создать экземпляр класса, а затем вызвать метод оценки().