1

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

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

将 String 转换为另一种类型(如 Integer、Char、Date 等)的成本与转换包含 Integer、Char、Date 等的 Object 的成本相同吗?

澄清一下,目前 Item 的值是以字符串格式处理的。该项目有一个名为 getValue() 的方法,它以字符串形式返回项目的值。但有时必须将此值转换为另一种类型,例如 int。所以我打算做的是将值的根类型更改为 Object 并公开 getString()、getInt()、getDate()、getChar() 等方法,其中值将从 Object 转换为具体的数据类型。当然,如果值不能被转换将返回空/零/等。

根据您的经验,最好的方法是什么?从 Object 转换为 int 是否与从 String 转换为 int 相同?

4

4 回答 4

0

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

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

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

于 2012-08-02T22:06:33.423 回答
0

如果您需要比我建议更好的性能,那么使用较低级别的语言(如C++. 也许使用函数式语言(如Erlang. 如果您想使用 Java,那么您应该避免标记类型并使用该语言提供的类型系统。标记类并不比实际的 java 类快多少。标记类是 Java 中过时的编程风格。例如,如果您需要转换StringDate,则此操作将比instanceof操作员执行的转换慢得多。在 Java 中还有Stop the worldGC 暂停,这对于实时应用程序来说可能是致命的。

于 2012-08-02T22:08:57.337 回答
0

谁在生产这些物品?它们不是以某种格式(例如 JSON 或 XML)提供给您,您实际上可以将数据编组为它们的真实类型吗?

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

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

那么就在此时您应该将它们放入正确的类型中。

您似乎想根据项目的类型发送消息或对项目执行操作,并且您正在尝试使用该类型转换它们。我不想回答你的问题,但你希望如何做到这一点?您是否首先尝试查看该项目是否为日期?然后如果不是,试着看看它是否是一个数字?什么优先?

如果你有一个Item需要处理的......并且你可以(如我之前所说,通过将输入数据编组为不同的类型,而不是字符串)得到 aStringItem和 a DateItem,例如,你可以使用访问者模式。

于 2012-08-02T22:18:32.730 回答
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);
}

那么,“转换”到底是什么意思?

于 2012-08-03T14:10:23.467 回答