1

我基本上在一个遗留系统上工作,其中遗留代码是用 Smalltalk 语言编写的,并试图将 Smalltalk 中的一些方法转换为 Java 中的等效方法名称。这些是 Smalltalk 中一个名为Grid. 我不熟悉 Smalltalk 语法。Java 中对应的名称是什么?方法签名是什么样的?

  1. at: cell put: data
  2. foreColor: color1 backColor: color2 cell: cell
4

2 回答 2

7

Smalltalk 使用内联参数- 类似于 Objective C。在 Java(以及从 Algol 派生的大多数其他语言)中,如果您使用超过 1 个参数,则这种样式是不可能的。因此,您必须使用约定将带有内联参数的 Smalltalk 消息转换为 Java 方法。

  • Cocoa Java 绑定使用下划线连接消息名称,并按顺序附加参数at_put(cell, data)foreColor_backColor_cell(color1, color2, cell)

  • 您还可以使用camel case的变体。但是,这可能会导致名称冲突(例如,如果有 Smalltalk 消息atPut,那么您不能缩短at:put:atPut

除了内联参数的转换之外,您还可能遇到 Smalltalk 代码使用保留关键字的问题。例如,for是 Smalltalk 中完全有效的消息,但不能命名 Java 方法for。如果您遇到这种情况,您必须采用转义策略——例如通过添加下划线使 Java 方法变为for_.

于 2012-09-06T13:44:34.633 回答
2

顺便说一句,这是错误的工作方式。如果您需要 java 输出,请让有经验的 smalltalker 从源代码为您生成它。Smalltalk 具有很好的反射能力,很容易生成 java 骨架。将 smalltalk 转换为遗留语言的更有趣的问题是块和执行:。

于 2012-09-09T21:30:04.693 回答