我有相当多的源文件需要解析并提取所有字符串文字并将它们作为播放旧的java常量放在文件中。
例如:

Label l = new Label("Cat");

会变成:

Label l = new Label(Constants.CAT);

Constants.java 中我会:

public final static String CAT = "Cat";

我不希望字符串在属性文本文件中外部化。
一个原因是一致性和代码可读性 另一个是我们的客户端代码使用 GWT ,它不支持Java属性文本文件机制。

我可以编写某种解析器(可能使用ant replace task)?
但我想知道 IDE 是否已经自动完成了这类事情。

有帮助吗?

解决方案

要完成Peter Kelley的回答,您可以考虑在eclipse IDE中使用 AST 解决方案。

然后你可以编写一个AST程序来解析你的源代码并做你想做的事。

eclipse corner提供了一个完整的示例文章 eclipse帮助
您可以在“就地实施”部分的清单5中找到一些示例翻译" 在Eclipse JDT中自动嵌入域特定语言 ,以及 GitHub项目中的多个示例

其他提示

Eclipse会自动执行此操作。右键单击该文件,选择“Source”,然后选择“Externalize strings”

这并不完全符合您的要求(将Constants.java文件中的字符串作为字符串),但使用的方法确实非常强大。它将它们移动到属性文件中,该文件可以根据您的语言环境动态加载。如您所建议的那样将它们放在单独的Java源文件中意味着您可以立即在应用程序中使用所有语言,或者根据区域设置提供不同的应用程序。

我们将它用于我们的应用程序,即使基本的东西必须用英语和日语发货 - 我们更复杂的应用程序有12种语言 - 我们不是一个小型的软件开发公司: - )。

如果你想要它们在Java文件中,尽管已经提到了这些缺点,编写一个程序来将属性文件变形为Java源文件比编写它更容易。从自由格式的Java源代码中提取字符串。

您需要做的就是修改Accessor类以使用内置字符串(在单独的类中),而不是在运行时加载它们。

有一些很好的理由可以解释为什么你不想这样做。除了事实上任何这样生成的文件(我不知道eclipse函数)不会区分你正在设置的字符串,例如,作为测试类中的构造函数args和你实际想要的东西常量,更大的问题是所有公共静态韵母都将被编译到您的类中,如果您想要改变类行为,您不仅需要更改包含常量的类,还需要更改引用它的所有内容。

我完全承认Pax Diablo所说的话。我们也在使用这个功能。

当应用于类文件时,函数“Externalize strings”将创建两个文件,一个是Messages.class类,一个是属性文件messages.properties。然后,它会将字符串文字的所有直接用法重定向到对Messages.get(String键)的调用,并使用您为“Ext”中的字符串输入的键。串QUOT;向导。

BTW:财产档案有什么不好?正如他所说,你可以只更改属性文件,如果你需要更改文本,则不必更改类。

另一个优点是:将字符串文字提取到属性文件中的方式使您可以自由地翻译任何语言的源语言而无需修改任何代码。属性文件加载器通过使用具有语言iso代码的相应文件自动加载目标语言文件。因此,您不必担心代码运行的平台,它将自动选择适当的语言(几乎)。请参阅 ResourceBundle 类的文档这是如何工作的。

您可以查看NetBeans中的 Jackpot源转换引擎,以便您编写脚本源转换。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top