我正在处理一个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?
答案 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);
}
那么,'转换'究竟是什么意思?