Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过使用泛型概括不同的实现_Java_Generics_Reflection - Fatal编程技术网

Java 通过使用泛型概括不同的实现

Java 通过使用泛型概括不同的实现,java,generics,reflection,Java,Generics,Reflection,我有几个类别(FloatOperand、BooleanOperand、IntegerOperand)非常相似。它们只是在被调用的“parse”方法(parseFloat、parseBoolean等)上有所不同——我能用一个GenericOperand类替换这个xxOperand类吗?(可能通过泛型/反射组合) 公共类floatOperator实现条件操作数{ Float parsedNumber=0.0f; 公共浮点操作数分析(字符串搜索){ 如果(!StringUtils.isEmpty(aS

我有几个类别(FloatOperand、BooleanOperand、IntegerOperand)非常相似。它们只是在被调用的“parse”方法(parseFloat、parseBoolean等)上有所不同——我能用一个GenericOperand类替换这个xxOperand类吗?(可能通过泛型/反射组合)

公共类floatOperator实现条件操作数{
Float parsedNumber=0.0f;
公共浮点操作数分析(字符串搜索){
如果(!StringUtils.isEmpty(aString)){
parsedNumber=Float.parseFloat(aString);
}
归还这个;
}
公共整数比较对象(条件操作数arg){
Float someArg=(Float)arg.getWrappedToken();
返回parsedNumber.compareTo(someArg);
}
公共浮点数getWrappedToken(){
返回此.parsedNumber;
}
/************/
公共接口条件操作数扩展{
/**
*@param aString
*-表示数字、日期或字符串的字符串。
*/
条件操作数解析(字符串搜索);
对象getWrappedToken();
}

您实际上在这里使用了不同的算法,例如
Float.parseFloat
。因此,从这几行代码中我看到,单独的类似乎是可以的。

由于调用了
Float.parseFloat()

但是您可以通过使用抽象类(而不是接口或除了接口之外)和泛型来避免双重代码,例如:

public class ConditionOperand<T extends Comparable<?>> implements Comparable<ConditionOperand<T>> {
  T parsedNumber; 
  public ConditionOperand<T> parse(String aString) {
    if(!StringUtils.isEmpty(aString)) {
      parsedNumber = simpleParse(aString);
    }
    return this;
  }

  public int compareTo(ConditionOperand arg) {
    T someArg = arg.getWrappedToken();
    return parsedNumber.compareTo(someArg);
  }

  public T getWrappedToken() {
    return this.parsedNumber;
  }

  public abstract T simpleParse(String s);
}

public class ConditionOperand试图将它们与反射统一起来将花费大量的速度开销。这几乎肯定不值得。谢谢。我将保持原样。太好了!!这正是我想要的。此外,我发现class ConditionOperand的正确语法将使用下限,否则它将无法编译:<代码>公共抽象类条件操作数
public class ConditionOperand<T extends Comparable<?>> implements Comparable<ConditionOperand<T>> {
  T parsedNumber; 
  public ConditionOperand<T> parse(String aString) {
    if(!StringUtils.isEmpty(aString)) {
      parsedNumber = simpleParse(aString);
    }
    return this;
  }

  public int compareTo(ConditionOperand arg) {
    T someArg = arg.getWrappedToken();
    return parsedNumber.compareTo(someArg);
  }

  public T getWrappedToken() {
    return this.parsedNumber;
  }

  public abstract T simpleParse(String s);
}
public class FloatOperand implements ConditionOperand<Float> {
  public Float simpleParse(String s) {
    return Float.parseFloat(s);
  }
}