【问题标题】:How can I create an auto-generated enum from a resource file?如何从资源文件创建自动生成的枚举?
【发布时间】:2012-09-01 14:49:33
【问题描述】:

我想从 android 创建一个类似于 R 的自动生成的资源文件。我知道如何解析和创建文件,并基本上创建一个新的类文件。我不知道该怎么做是开始这个​​自动生成过程。

所以,使用 Eclipse(尽管如果有办法以不可知的方式实现这一点,我会更喜欢它),我如何触发自动生成会话来读取属性文件并创建一个 .java 文件保存这个解析文件中的静态变量和“键”,然后我可以从我的代码中引用它们吗?

【问题讨论】:

  • 如果您只想在更改资源(.properties 文件)后触发生成,您可以使用调用生成器的 ant-builder。鼠标右键单击项目 -> 属性 -> 生成器 -> 新建

标签: java resources auto-generate


【解决方案1】:

几个例子说明如何生成java源文件have already been provided。读取属性文件并调用其中一个 API 应该相对容易。

要触发代码生成过程,您需要添加自定义构建步骤。使用 Ant,只需 add a custom task。然后将其连接到 Eclipse Builder:项目 Properties -> Builders -> New。

随后,Eclipse 应自行查找并刷新此文件。如果没有,请检查您的配置:首选项-> 常规-> 工作区-> 找到“使用本机挂钩或轮询刷新”和类似的并检查它们。 (请注意,我不能 100% 确定最后一部分是否有效。)

阻力最小的路径是单独运行此构建步骤。如果您的属性文件不经常更改,那么它应该没什么大不了的。这类似于您使用 Protocol Buffers、JAXB、wsdl2java 等时所做的事情。如果您希望一切都像 R.java 那样神奇地工作,那么您可能需要做一些更复杂的事情:

- 尝试使用 Eclipse Builder 选项来控制 Ant 任务何时执行 - 如果您无法弄清楚,那么我会检查 Eclipse 如何连接到上述项目(即,连接到协议缓冲区、JAXB、wsdl2java 等) - 查看 ADT 自定义 PreCompilerBuilder 类 - 查看build-helper-plugin

【讨论】:

  • 谢谢。正是我需要的。我会再给赏金几天,看看我是否可以为未来提供更多细节,但很可能是你的。
  • 如果 ant 为您工作,那么一旦您有了 ant 任务,就将构建器添加到 eclipse 项目(项目属性、构建器、添加 ant )。有很多选项可用于选择任务和控制何时执行。过去,我已经能够进行设置,以便监视单个目录的更改,然后导致 ant 任务运行(自动执行 jsmin)。
  • 你说得对,我似乎忘记包含有关 Eclipse Builders 的信息。为了完整起见,我在上面添加了它。
【解决方案2】:

通常使用ResourceBundle 创建一个允许您按键查找属性的对象。您可以在Java Trail 上了解ResourceBundle

基本思想是你有一个带有.properties 扩展名的文本文件。您将ResourceBundle 对象指向该文件。然后,您可以使用getString()getObject() 方法将密钥传递给您想要的属性。这就是它的全部。您只需要在启动程序时(或在您需要它之前的某个时间)加载ResourceBundle

如果您创建自己的类,并将 ResourceBundle 作为成员值,则可以使用类似这样的简单代码来使用简单的 get() 方法来获取属性值:

    public String get(String aString)
    {        
    String sVal = null;

    try
    {
        sVal = (String)myProperties.getObject(aString);
    }
    catch (MissingResourceException e)
    {
        log.debug("Missing Property Value: "+aString);
    }

    return sVal;
    }

希望对你有用。

【讨论】:

  • 谢谢,但不是我要找的。我正在寻找最终的非实例化类,它将自动生成以包含来自资源文件的键,然后我可以自动创建一个 .java 文件。
  • 抱歉,当我看到您想从属性文件中读取数据时,我一定是有点过激了。最好的方法是使用ResourceBundle
猜你喜欢
  • 2021-11-13
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
相关资源
最近更新 更多