有没有简单的方法可以返回整数值或双精度值?

时间:2019-08-13 17:00:14

标签: java generics generic-programming getvalue

我正在用Java重新创建类似于pandas数据框的内容,以读取csv文件并处理数据。我已将所有代码编码为通用代码,以处理csv文件中的任何类型的列,并自动声明包装类(例如Integer和Double)(如果为数字)。问题是,现在我正在编写只涉及数字列的函数,但是我仍然需要进行大量的转换才能获得实际的值,而我想找到一个更优雅的解决方案。

我已经尝试在方法中进行强制转换并且可以正常工作,但是我正在寻找一种方法来返回数字值(如果它是列类中的数字),以避免对将来的函数执行此操作:

  //the basic structure
  public class Column<T> {
  public String type; //column type
  public String name; //column name
  public ArrayList<T> values; //array of values
...
  public T getValue(int index) {
      return values.get(index);
  }
}


//in another file is the problem
public static double variance(Column c) {
    double mean = mean(c);
    double var = 0;
    for(int i = 0;i < c.getLength();i++) {
                            // here is the problem
        var = Math.pow((((Number) c.getValue(i)).doubleValue()-mean),2);
    }
    return var/c.getLength();
  }

1 个答案:

答案 0 :(得分:0)

如果您可以自由修改Column类或创建另一个更具体的子类,而不必在对象外部进行强制转换,则可以添加方法以在内部返回double值(如果它是double值),则返回int (如果是int等),因为在您的示例中您知道ColumnColumn<Number>。例如:

public class DoubleColumn extends Column<Number> {
    @Override
    public Double getValue(int index) {
        return super.getValue(index).doubleValue();
    }
}

然后,您可以相应地修改方差方法以采用DoubleColumn而不是Column