Java 计算类型的高效转换

Java 计算类型的高效转换,java,casting,prefuse,Java,Casting,Prefuse,我有一个预使用表结构,即每一行由一个元组表示,您可以通过table.get(rowNumber,columnName)或tuple.get(columnName)-而get将返回一个对象,如果您知道返回类型,则有更具体的方法,例如getDouble()或getInt() 除数字外,该表还存储时间,时间可用String,即08:15或20:10。为了计算适当的平均值,我必须使用两次之间的距离(例如,11:55,或者更准确地说,715,以分钟为单位) 因此,每个数字都分配给一个区间长度,该长度用作权

我有一个预使用表结构,即每一行由一个元组表示,您可以通过
table.get(rowNumber,columnName)
tuple.get(columnName)
-而get将返回一个
对象
,如果您知道返回类型,则有更具体的方法,例如
getDouble()
getInt()

除数字外,该表还存储时间,时间可用
String
,即
08:15
20:10
。为了计算适当的平均值,我必须使用两次之间的距离(例如,
11:55
,或者更准确地说,
715
,以分钟为单位)

因此,每个数字都分配给一个区间长度,该长度用作权重因子,即
tuple.getDouble(“sales”)*60/Double.valueOf(interval)
。此外,它被添加到一个名为
mean
的变量中,类型为
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)
等等。当然,在我的例子中,我先检查a列是哪种类型,最后得到四个
if
s和四行计算

现在我想知道是否有一种有效的方法来类型转换我需要的所有参数。我可以通过简单地使用
classtype=column.getColumnType()来计算列的类型

我想不出一种更有效(更美观)的设计方法,因为如果我试图在计算中使用
type.cast()
,我会被告知这一点

未为参数类型对象int定义运算符*


是否有任何方法可以动态地对此类计算进行类型转换(可能使用不同的数据结构,即不使用
Number
)?这并不可怕,因为我现在拥有的代码正在工作,只是我不太满意,而且看到其他人是否会继续使用这段代码也很可怕。

好吧,我的问题不是我找不到正确的类型,而是我想要一行代码,而不是8行代码(4
if
s和4次计算)。:)例如,
mean=(Number)(type.cast(mean)+type.cast(tuple.get(“sales”)*60/type.cast(interval));
,但恐怕没有解决我喜欢的方法:(我想没有,但我想听听其他人的意见well@Berger重载在这里有什么用处。你能详细说明一下吗?因为据我所知,它只有在OP有正确的类型要传递时才会起作用。如果有重载方法的对象版本可用,则将调用。我想,如果需要,请进行更正对于任意的
Number
实例,通常没有简洁而相关的方法来执行计算而不强制转换它们。在许多情况下可能适用的一种解决方法是使用
double
(如
Number.doubleValue()
)简单地执行所有操作,并且仅当必须将结果写回类型为
Integer
的列时才强制转换结果。但请注意,例如,并非所有
long
值都可以表示为
double
,而不会失去精度。一般来说,尝试将不同的数字类型重载到一个结构中基本上是行不通的我的问题不是我找不到正确的类型,而是我想要一行代码而不是8行(4
if
s和4次计算):)例如,
mean=(Number)(type.cast(mean)+type.cast(tuple.get(“sales”)*60/type.cast(interval));
,但恐怕没有适合我的解决方案:(我想没有,但我想听听其他人的意见well@Berger重载在这里有什么用处。你能详细说明一下吗?因为据我所知,它只有在OP有正确的类型要传递时才会起作用。如果有重载方法的对象版本可用,则将调用。我想,如果需要,请进行更正对于任意的
Number
实例,通常没有简洁而相关的方法来执行计算而不强制转换它们。在许多情况下可能适用的一种解决方法是使用
double
(如
Number.doubleValue()
)简单地执行所有操作,并且仅当必须将结果写回类型为
Integer
的列时才强制转换结果。但请注意,例如,并非所有
long
值都可以表示为
double
,而不会失去精度。一般来说,尝试将不同的数字类型重载到一个结构中基本上是行不通的在Java中,d导致失败。