1

定数パラメータ/フィールド値 (つまり、値 0/値 1/値 2) を繰り返し処理せずに要素を検索しようとしています。方法はありますか?enum定数名(つまり、CONSTANT0/CONSTANT1/CONSTANT2)で機能するguavaユーティリティメソッドが見つかりましたが、その名前のパラメーター/フィールド値ではありません。

    import com.google.common.base.Enums;

    enum Enum {
        CONSTANT0("value0"), CONSTANT1("value1"), CONSTANT2("value2");
        private final String value;

        Enum(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    public class Driver {
        public static void main(String[] args) {
            // prints when input is value0
            for (Enum constant : Enum.values()) {
                if (constant.getValue().equalsIgnoreCase(args[0])) {
                    System.out
                            .println("vanilla version works with value i.e. java Driver value0"
                                    + args[0]);
                }
            }
            // prints when input is CONSTANT0
            if (Enums.getIfPresent(Enum.class, args[0]).isPresent())
                System.out
                        .println("guava version works with constant i.e. java Driver CONSTANT0"
                                + args[0]);
        }
    }
4

3 に答える 3

1

いいえ。

列挙型は、開発者がよりクリーンな方法で定数を列挙できるようにするために、Java 1.5 で設計および導入されました。ソースを見るEnum.javaと、ハッシュマップのような簡単な検索方法は見当たりません。コードを明確にするために、列挙型に値が含まれているかどうかを確認したい場合は、ユースケースごとに反復する必要はありません。列挙型の内容を反復する静的メソッドを作成する必要があります。

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2015-06-27T06:07:27.550 に答える
0

@Jon Skeet @Patricia Shanahan @Devarsh Desai @ajbの提案に基づく

import java.util.EnumMap;
import java.util.Map;

import com.google.common.base.Enums;

enum Enum {
    CONSTANT0("value0"), CONSTANT1("value1"), CONSTANT2("value2");
    private final String value;
    static final Map<Enum, String> enumMap = new EnumMap<Enum, String>(
            Enum.class);

    static {
        for (Enum e : Enum.values())
            enumMap.put(e, e.getValue());
    }

    private Enum(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}

public class Driver {
    public static void main(String[] args) {
        // prints when input is value0
        for (Enum constant : Enum.values()) {
            if (constant.getValue().equalsIgnoreCase(args[0])) {
                System.out
                        .println("vanilla version works with value i.e. java Driver value0 "
                                + args[0]);
            }
        }
        // prints when input is CONSTANT0
        if (Enums.getIfPresent(Enum.class, args[0]).isPresent())
            System.out
                    .println("guava version works with constant i.e. java Driver CONSTANT0 "
                            + args[0]);
        // prints when input is value0
        if (Enum.enumMap.containsValue(args[0]))
            System.out
                    .println("static map version works with value i.e. java Driver value0 "
                            + args[0]);
    }
}
于 2015-06-28T14:53:30.533 に答える