1

次のように、クラス FOO と BAR を持つ enum FooBar をクラス Clazz に持っています。

class Clazz {
    enum FooBar{
        FOO,
        BAR
    }
}

ウィケット メソッドを使用して値とgetString()をローカライズしたいと思います。私ができる最善のことは、i18nファイルで定義することですFOOBAR

 Clazz.FooBar.FOO=foo
 Clazz.FooBar.BAR=bar

このコードで値を取得します

 fooBar = FooBar.FOO;
 getString("Clazz.FooBar." + fooBar.name());

これは、i18n クエリ文字列を追加しなくても実現できると聞いていClazz.FooBarますが、呼び出すメソッドが異なります。これを行う方法?

4

5 に答える 5

1

このメソッドをベース ページ/パネルに配置できます。

public String getString(Enum<?> value) {
    Class<?> enclosingClass = value.getClass().getEnclosingClass();
    String key = (enclosingClass == null ? "" : enclosingClass.getSimpleName() + ".")
            + value.getClass().getSimpleName() + "." + value.name();
    return getString(key);
}

次に、単に呼び出すことができます

getString(Clazz.FooBar.FOO);

プロパティファイルで定義したものが返されます。

于 2012-08-09T17:00:24.823 に答える
1

プロパティファイルに列挙型定数名を直接保存することはお勧めしません.2つの異なる列挙型が同じ名前を保持できるという単純な理由です。

以下は私が思いついたコードです

class Clazz {
enum FooBar {
    //StrId are keys from property file e.g. below
    FOO("com.abc.classz.foobar.FOO"), BAR("com.abc.classz.foobar.BAR");

    private final String strId;

    private FooBar(String id) {
        this.strId = id;
    }

    // toString can also be used here I am just keen on having seperate
    // method
    public String getName() {
        //Load Value for strId from properties file
        return null;
    }
}
}

これにより、列挙型と i18n の目的が分離され、明確になります。

于 2012-08-13T18:01:16.743 に答える
0

簡単に定義できます

FOO=foo
BAR=bar

プロパティで、次の方法でアクセスします

getString(fooBar.name());

または私はいくつかのポイントを逃していますか?

于 2012-08-01T17:04:57.747 に答える
0

以下のサンプル Enum クラスを参照してください。必要に応じて、さらにカスタマイズすることもできます。

    public enum FooBar {

    foo("foobar.foo"),
    bar("foobar.bar");

    private String key;

    ErrorCodeEnum(final String key) {
        this.key = key;     
    }



    public String toString() {
        return key;
    }
}

次に、 toString メソッドを作成してキーを直接返すことができるので、使用できます

 getString(ErrorCodeEnum.ERROR1);

または、以下のように toString メソッドを直接オーバーライドできます

 public enum FooBar {

    foo, bar;

     public String toString(){
        return getClass().getName()+"."+name();
     }
  }
于 2012-08-01T11:43:42.957 に答える
0

というものを探していましたEnumChoiceRenderer。主なアイデアは、たとえば DropDownChoise 要素に EnumChoiceRenderer を与えることであり、質問で提案した種類のパラメーターを与えることができます。わかりました、このソリューションでは、与えることができるのは

     FooBar.BAR=bar
     FooBar.FOO=foo

あなたのリソースファイルにありますが、これは私が暇なときにこれをさらに調査したときに見つけた最も近いものです。

PS。この回答の冒頭にある EnumChoiseRenderer をクリックして、このソリューションの記事を参照してください。

于 2012-08-01T18:45:29.623 に答える