我有一个 prefuse-table 结构,即每一行都由一个元组表示,您可以通过table.get(rowNumber, columnName)
或 via访问值tuple.get(columnName)
- 而 get 将返回一个Object
更具体的方法,如果您知道返回类型,例如getDouble()
or getInt()
。
除了数字之外,该表还存储时间,可用作String
、 ie08:15
或20:10
。为了计算适当的平均值,我必须使用两次之间的距离(例如,11:55
或者更精确715
地以分钟为单位)。
因此,每个数字都分配了一个区间长度,用作加权因子,即tuple.getDouble("sales") * 60 / Double.valueOf(interval)
。此外,它被添加到一个名为mean
type的变量中Number
(我使用它是因为它可以灵活地使用多种数字类型)。所以总的来说,这条线看起来像mean = mean.doubleValue + tuple.getDouble("sales") * 60 / Double.valueOf(interval);
但并非所有数字列都是类型double
,因此,我对 int、float 和 long 有相同的行。他们只是看起来像mean = mean.intValue + tuple.getInt("aColumn") * 60 / Integer.valueOf(interval)
等等。当然,在我的情况下,我会事先检查一列是哪种类型,最后得到四个if
s 和四行计算。
现在我想知道是否有一种有效的方法来对我需要的所有参数进行类型转换。我可以通过简单地使用来评估列的类型Class type = column.getColumnType();
我想不出一种更有效(更好看)的方法来设计它,因为如果我尝试type.cast()
在计算中使用,我会被告知
运算符 * 未定义参数类型 Object, int
有没有办法动态地对此类计算进行类型转换(可能使用不同的数据结构,即不使用Number
)?我现在所拥有的并不可怕,因为它正在工作,只是我并不真正满意,看看另一个人是否会继续使用这段代码是很糟糕的。