मैं एक JexlEngine ऑब्जेक्ट को इनिशियलाइज़ करने की कोशिश कर रहा हूँ, लेकिन कंस्ट्रक्टर मुझे ऐसा करने नहीं देता है (हालाँकि प्रलेखन कहता है कि यह होना चाहिए)।

यहाँ JexlEngine वर्ग (jexl3 में) के लिए प्रलेखन है: https://people.apache .org/~henrib/jexl-3.0/apidocs/org/apache/commons/jexl3/JexlEngine.html

मूल रूप से कोड ने jexl2 आयात के साथ काम किया, लेकिन मैंने हाल ही में प्रोजेक्ट को मावेन में बदल दिया है, और इसके बजाय jexl3 को स्वैप करना पड़ा। अब कंस्ट्रक्टर काम नहीं करता है।

क्या मुझे कुछ याद आ रहा है?

मैं जावा 1.8 पर नेटबीन्स में इस प्रोजेक्ट को चला रहा हूं - यह एक मेवेन प्रोजेक्ट है जिसमें jexl3 के लिए निर्भरता शामिल है (हालांकि jexl2 के साथ काम करने के लिए प्रयोग किया जाता है)

मेरा कोड:

public static final JexlEngine jexl = new JexlEngine(null, new MyArithmetic(), null, null){};

static {
        jexl.setCache(512);
        jexl.setLenient(false); // null shouldnt be treated as 0
        jexl.setSilent(false);  // Instead of logging throw an exception
        jexl.setStrict(true);
}

प्रलेखन के आधार पर, 4 मापदंडों के साथ एक कंस्ट्रक्टर होना चाहिए, क्योंकि मैं इसे चलाने की कोशिश कर रहा हूं, लेकिन किसी अजीब कारण से, यह मुझे इसे चलाने नहीं देगा। कोई विचार क्यों? (फिर से - यह Jexl2 के साथ काम करता था)

त्रुटि लॉग:

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project bilbon-core: Compilation failure: Compilation failure:
si/smth/project/bean/CUtil.java:[333,43] constructor JexlEngine in class org.apache.commons.jexl3.JexlEngine cannot be applied to given types;
required: no arguments
found: <nulltype>,si.smth.project.bean.CUtil.MyArithmetic,<nulltype>,<nulltype>
reason: actual and formal argument lists differ in length
si/smth/project/bean/CUtil.java:[333,99] <anonymous si.smth.project.bean.CUtil$1> is not abstract and does not override abstract method newInstance(java.lang.String,java.lang.Object...) in org.apache.commons.jexl3.JexlEngine
si/smth/project/bean/CUtil.java:[336,13] cannot find symbol
symbol:   method setCache(int)
location: variable jexl of type org.apache.commons.jexl3.JexlEngine
si/smth/project/bean/CUtil.java:[337,13] cannot find symbol
1
Bg Zape 12 जून 2019, 12:14

1 उत्तर

सबसे बढ़िया उत्तर

खाली कंस्ट्रक्टर का उपयोग करें, जो कि नवीनतम जावा डॉक्स

JexlEngine jexl = new JexlEngine();

या jexl में बताए अनुसार JexlBuilder का उपयोग करें:

JexlEngine jexl = new JexlBuilder().create();

आप अपने सेटर्स के लिए बिल्डर विधियों को कॉल कर सकते हैं:

JexlEngine jexl = strict(true).silent(false).cache(512) .create();

उदार ध्वज के बजाय आपके पास setSilent और setStrict संयोजन हैं:

सेटसाइलेंट और सेटस्ट्रिक्ट विधियां विभिन्न त्रुटि नियंत्रण आवश्यकताओं के अनुसार इंजन इंस्टेंस व्यवहार को ठीक करने की अनुमति देती हैं। सख्त ध्वज इंजन को बताता है कि कब और यदि अशक्त के रूप में एक त्रुटि माना जाता है, तो मूक ध्वज इंजन को बताता है कि त्रुटि के साथ क्या करना है (चेतावनी के रूप में लॉग इन करें या अपवाद फेंकें)।

  • जब "चुप" और "सख्त नहीं": 0 और शून्य "डिफ़ॉल्ट" मानों के संकेतक होने चाहिए ताकि त्रुटि के मामले में भी, कुछ सार्थक अभी भी अनुमान लगाया जा सके; विन्यास के लिए सुविधाजनक हो सकता है।
  • जब "चुप" और "सख्त": किसी को शायद एक त्रुटि मामले के रूप में नल का उपयोग करने पर विचार करना चाहिए - यानी, जेईएक्सएल द्वारा छेड़छाड़ की गई प्रत्येक वस्तु को मूल्यवान होना चाहिए; टर्नरी ऑपरेटर, विशेष रूप से '?:' फॉर्म का उपयोग असाधारण मामलों को हल करने के लिए किया जा सकता है। केस का उपयोग बिना किसी निहित मान या डिफ़ॉल्ट के कॉन्फ़िगरेशन हो सकता है।
0
Community 20 जून 2020, 12:12