2012-09-14 12 views
16

मेरे अगर कथन में, मैं एक चर की तुलना करना चाहता हूं, जो एक जेडके 1.5 एनम है, जो कि एक एनम शाब्दिक है। उदाहरण के लिए:फ्रीमार्कर: अगर एक कथन में एक enum

<#if type == ProblemStatisticType.BEST_SOLUTION_CHANGED> 
    ... 
</#if> 

लेकिन मैं इस अपवाद प्राप्त करें:

freemarker.core.InvalidReferenceException: Expression ProblemStatisticType is undefined on line 430, column 87 in index.html.ftl. 
at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:125) 
at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:135) 

मैं ऐसा कैसे कर सकता है?

उत्तर

18

दुर्भाग्य से, FreeMarker भाषा कक्षाओं की अवधारणा नहीं है ... लेकिन आप यह कर सकते हैं :

<#if type.name() == "BEST_SOLUTION_CHANGED"> 
    ... 
</#if> 

या यदि आप enum प्रकार के लिए toString() पर भरोसा है, .name() हिस्सा छोड़ा जा सकता है।

1

आप की तरह दोहरे उद्धरण में एक निरंतर enum मूल्य निर्दिष्ट करना चाहिए आप enums तुलना करने के लिए करना चाहते हैं:

<#if type == "BEST_SOLUTION_CHANGED"> 
    ... 
</#if> 
+0

यह काम करता है, लेकिन यह अनुकूल नहीं है। क्या होगा अगर enum toString() विधि को ओवरराइट करता है? –

1

मैं इस सफलतापूर्वक (जावा 1.6 और 1.7 में, 1.5 प्रयास नहीं किया है) की तरह कुछ का इस्तेमाल किया है:

<#if type?? && statics["com.your.package.ContainingClass$TypeEnum"].BEST_SOLUTION_CHANGED.equals(type)> 
    Do some freemarker or HTML here 
</#if> 

इस तरह एक और वर्ग के अंदर enum के साथ है:

class ContainingClass { 
    public enum TypeEnum { 
    WORST(0), 
    BEST_SOLUTION_CHANGED(1); 

    private int value; 

    private TypeEnum(int value) { 
     this.value = value; 
    } 

    public int value() { 
     return this.value; 
    } 
    }; 
} 

और प्रकार चर जावा में कुछ ऐसा परिभाषित किया गया है:

TypeEnum type = TypeEnum.BEST_SOLUTION_CHANGED; 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^