คุณสามารถใช้แผนที่แบบคงที่ใน enum ของคุณที่แมป Strings กับ enum คงที่ ใช้ในวิธีคงที่ 'getEnum' สิ่งนี้จะข้ามความจำเป็นในการวนซ้ำผ่าน enums ทุกครั้งที่คุณต้องการรับหนึ่งจากค่า String
public enum RandomEnum {
    StartHere("Start Here"),
    StopHere("Stop Here");
    private final String strVal;
    private RandomEnum(String strVal) {
        this.strVal = strVal;
    }
    public static RandomEnum getEnum(String strVal) {
        if(!strValMap.containsKey(strVal)) {
            throw new IllegalArgumentException("Unknown String Value: " + strVal);
        }
        return strValMap.get(strVal);
    }
    private static final Map<String, RandomEnum> strValMap;
    static {
        final Map<String, RandomEnum> tmpMap = Maps.newHashMap();
        for(final RandomEnum en : RandomEnum.values()) {
            tmpMap.put(en.strVal, en);
        }
        strValMap = ImmutableMap.copyOf(tmpMap);
    }
    @Override
    public String toString() {
        return strVal;
    }
}
ตรวจสอบให้แน่ใจว่าการเริ่มต้นแบบคงที่ของแผนที่เกิดขึ้นใต้การประกาศค่าคงที่ enum
BTW - ประเภท 'ImmutableMap' นั้นมาจาก Google guava API และฉันขอแนะนำอย่างแน่นอนในกรณีเช่นนี้
แก้ไข - ตามความคิดเห็น:
- โซลูชันนี้ถือว่าค่าสตริงที่กำหนดแต่ละค่าไม่ซ้ำกันและไม่ใช่ค่าว่าง เนื่องจากผู้สร้าง enum สามารถควบคุมสิ่งนี้ได้และสตริงสอดคล้องกับค่า enum ที่ไม่ซ้ำกันและไม่เป็นค่าว่างจึงดูเหมือนเป็นข้อ จำกัด ที่ปลอดภัย
 
- ฉันเพิ่มเมธอด 'toSTring ()' ตามที่ถามในคำถาม