【问题标题】:Use Wicket properties in Enums directly直接在 Enums 中使用 Wicket 属性
【发布时间】:2015-09-16 07:35:52
【问题描述】:

我有一个如下所示的枚举:

package de.test;

public enum TestEnum {
    bar("Test");

    private final String label;

    private TestEnum(String labelName) {
        this.label = labelName;
    }

    public String getLabel() {
        return label;
    }
}

我想将字符串“Test”存储在 Java 属性文件中。枚举“TestEnum”应该存储属性键,它的“getLabel”方法应该在属性文件中查找适当的值并返回这个值。

package de.test;

public enum TestEnum {
    bar("test.key");

    private final String label;

    private TestEnum(String labelKey) {
       this.label = labelKey;
    }

    public String getLabel() {
        // Look up properties value with label as key in the according properties file
        String labelValue = ...
        return labelValue;
    }
}

我有一个如下所示的属性文件:

test.key=Test

这个问题的背景是:我有一个Wicket Component,比如说一个标签,标签的值存储在这个枚举中。但是枚举不应该保存使用过的字符串,而应该只保存属性文件的键。将属性键返回到 Wicket 组件并让组件在适当的属性文件中查找值的解决方案在我的情况下是不切实际的。

我使用 Wicket 6.17 和 Java 8。

感谢您的提示。

编辑:这个问题的意图: 在这种情况下使用枚举是由于可能无法更改的旧架构。另一方面,存在一个请求,即不允许此枚举保存标签的具体字符串,因为 GUI 中使用的所有字符串都必须导出到属性文件。

我的另一个目的是了解这是否可以让枚举使用属性文件,也许在 Wicket 框架的帮助下。

【问题讨论】:

  • 1.给出可编译的代码(至少是第一个枚举)。 2. 可能我没看懂这个问题,可能你java enum 的。最终,如果我们构建可编译的代码,枚举只会通过第一次类加载初始化一次——这是你的目标吗?看来你打破了 Java 枚举哲学
  • 编译错误,运行时异常(带有stacktrace)是程序员的,如果Yoy不包括,你失去了专业anwser的机会
  • Wicket 模型理念也被误解,示例与 wicket/model 无关
  • 编辑了我的问题,希望它更具体。感谢您的建议。编辑:我测试了第一个代码 sn-p 并且它是可编译的。
  • 好的。修改后更好。你写的一切都是“典型的”,除了枚举。为什么要枚举?这是规范文档(不要害怕“内部化”这个词,也可以用于单一语言替换)cwiki.apache.org/confluence/display/WICKET/…

标签: java properties enums wicket


【解决方案1】:

我#getLabel() 做Application.get ().getLocalizer ().getString(key)

附:对于错误的格式。我在我的移动设备中。

【讨论】:

【解决方案2】:
private TestEnum(String labelKey) {
       this.label = KinfOfPropertyLoader(labelKey); // probably static
    }

但是有多少“项目”有你的清单? enum 具有一组常量值(“项目”),通常很小。 GUI 拥有庞大且不断增长的列表。

【讨论】:

  • 在这种情况下,枚举只有两个项目。
  • 这么多发明的两个糟糕的控制字符串?可能我太老了:(
【解决方案3】:

如果我做对了,你想将枚举变量传递给Label 并让标签获取枚举值的 i18n 值吗?

TestEnum somevar = TestEnum.bar;
add(new Label("label", somevar));

查看 EnumLabel 类并覆盖它的 getResource 方法:

@Override
protected String resourceKey(TestEnum value) {
    return value.getValue();
}

它将使用 Enums 值来确定要使用的属性键。

【讨论】:

    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2015-04-25
    相关资源
    最近更新 更多