非常に似ているいくつかのクラス(FloatOperand、BooleanOperand、IntegerOperand)があります。それらは(parseFloat、parseBooleanなど)呼び出される "解析"メソッドでのみ異なります。 - このxxOperandクラスを1つのGenericOperandクラスで置き換えることはできますか? (多分Generics/Reflectionの組み合わせで)。ジェネリックスを使用して異なる実装を一般化する
public class FloatOperand implements ConditionOperand {
Float parsedNumber = 0.0f;
public FloatOperand parse(String aString) {
if(!StringUtils.isEmpty(aString)) {
parsedNumber = Float.parseFloat(aString);
}
return this;
}
public int compareTo(ConditionOperand arg) {
Float someArg = (Float) arg.getWrappedToken();
return parsedNumber.compareTo(someArg);
}
public Float getWrappedToken() {
return this.parsedNumber;
}
/************/
public interface ConditionOperand extends Comparable<ConditionOperand> {
/**
* @param aString
* - String representing a number, or a date, or a string.
*/
ConditionOperand parse(String aString);
Object getWrappedToken();
}
のようなサブクラスを実装することは、リフレクションで統一しようとするとかなりのスピードオーバーヘッドが発生します。それはそれほど価値のあるものではありません。 –