Java:从对象转换为其他数据类型的处理器成本

时间:2012-08-02 21:58:36

标签: java object

我正在处理一个Java项目,我处理一个项目列表,其中每个项目的id类型为int,值类型为String。然后我有另一个名为ItemCollection的类型,它在内部有列表并公开了添加,删除,获取项目等方法。

该应用程序是一个金融交易网关,因此我们非常关注性能,因为应用程序每秒会收到许多交易。我的问题是:

将String转换为其他类型(如Integer,Char,Date等)的成本与转换包含Integer,Char,Date等的Object相同?

为了澄清,目前Item的值以String格式处理。该项有一个名为getValue()的方法,它返回String中项的值。但有时这个值必须转换为另一种类型,例如int。所以我打算做的是将值的根类型更改为Object并公开getString(),getInt(),getDate(),getChar()等方法,其中值将从Object转换为具体的数据类型。当然,如果无法转换的值将返回null / zero / etc。

根据您的经验,最好的方法是什么? 从Object转换为int而不是String转换为int?

4 个答案:

答案 0 :(得分:0)

根据您提供的详细程度,我的建议是:不要这样做!

找到一种使用Java类型系统建模数据的方法。避免类型转换(例如String to Integer),并避免类型转换(例如(String)someObject)。

如果您对特定操作有疑问(例如Integer的toString功能),那么我建议您查阅文档或源代码。

答案 1 :(得分:0)

如果你需要比我的表现更好的表现,那么使用像C++这样的低级语言会好得多。也许使用像Erlang这样的函数式语言是合适的。如果您想使用Java,那么您应该避免使用类型并使用该语言提供的类型系统。 Taged类并不比实际的java类快得多。标记类是Java中过时的编程风格。如果您需要将String转换为Date,例如,那么此操作将比instanceof运算符执行的转换慢得多。同样在Java中,Stop the world GC暂停,这对于实时应用程序来说可能是致命的。

答案 2 :(得分:0)

谁在制作这些物品?他们是不是以某种格式(例如JSON或XML)向您提供实际上可以将数据封送到实际类型的数据?

例如,如果您收到类似以下内容的JSON消息:

date: 2012-12-25
acct: 12345
amount: 123.50

那时你应该把它们放到正确的类型中。

您似乎希望根据类型调度消息或对项目执行操作,并且您尝试使用该类型转换它们。我讨厌不回答你的问题,但你希望如何实现这个目标呢?您是否首先尝试查看该项目是否为日期?然后,如果没有,试着看看它是否是一个数字?什么优先?

如果你有Item需要处理..你可以(正如我之前所说,通过将输入数据编组到不同的类型,而不是字符串)得到StringItem和{{ 1}},例如,您可以使用访客模式。

答案 3 :(得分:0)

这取决于'转换'的含义。这不是Java中精确的艺术术语。

如果你的意思是'演员',那么答案就是演员阵容很快。您的ItemCollection类可能有这样的方法:

public int getInt(int index) {
    Object value = getObject(index);
    return (Integer)value;
}

演员阵容将添加一些机器说明。

如果你的意思更像是'解析',那么答案是解析比投射慢几百或几千倍,但与I / O相比仍然很快。如果您正在解析,您的代码可能如下所示:

public int getInt(int index) {
    String value = getString(index);
    return Integer.parseInt(value);
}

那么,'转换'究竟是什么意思?