सबसे पहले मुझे यकीन नहीं है, और यह अलग नहीं है क्योंकि "इसे संकलित करना चाहिए लेकिन यह नहीं है और न ही विपरीत है, इसलिए अधिक से अधिक यह कोडर को परेशान करेगा"

    byte  b1 =  (byte) 1;
    Integer b2 = () 1;

तो पहला ठीक और अर्थहीन कास्टिंग है, और दृष्टांत के लिए है,

दूसरे के लिए, कंपाइलर से दो त्रुटियां हैं:

  1. टोकन पर सिंटैक्स त्रुटि "(", इस टोकन के बाद अपेक्षित बाइट (यह पहले '(' पर है)
  2. बेमेल टाइप करें: बाइट से इंटीजर में कनवर्ट नहीं किया जा सकता (दूसरे कोष्ठक से मूल्य तक)

विचार - विमर्श:

एक्लिप्स कंपाइलर एक प्रकार का बाइट सुझाता है न कि दूसरे प्रकार का, हो सकता है कि बाइट इंट के समान प्रकार हो। और यह ठीक है। दूसरा स्पष्ट रूप से गलत है, '1' बाइट नहीं है जबकि संकलक इसके बारे में शिकायत कर रहा है जैसे यह मामला है।

तो एक्लिप्स कंपाइलर के लिए दूसरा स्टेटमेंट इस तरह है:

Integer b2 = (byte) 1;

ग्रहण संस्करण: ऑक्सीजन.२ रिलीज (४.७.२)

जावा (टीएम) v20140604-1726, 3.10.0 . के लिए ग्रहण संकलक

-1
Curcuma_ 12 मई 2018, 19:57

1 उत्तर

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

Java® भाषा विशिष्टता निर्दिष्ट करता है कि वैध जावा कोड क्या है और वैध जावा कोड क्या नहीं है। यह कंपाइलर त्रुटियों के शब्दों को निर्दिष्ट नहीं करता है

सिंटैक्स त्रुटियों को संकलन के दौरान वर्ण स्ट्रीम को तथाकथित टोकन (जैसे (, {, byte, चर नाम, ...). इन टोकन के आधार पर और व्याकरण नियम< /strong>, कंपाइलर एक एब्स्ट्रैक्ट सिंटैक्स ट्री बनाने की कोशिश करता है.

आपके उदाहरण में, दिए गए नियमों के साथ यह संभव नहीं है। समस्या यह है कि () 1 एक CastExpression. CastExpression के लिए तीन नियम हैं:

CastExpression:
  ( PrimitiveType ) UnaryExpression 
  ( ReferenceType {AdditionalBound} ) UnaryExpressionNotPlusMinus 
  ( ReferenceType {AdditionalBound} ) LambdaExpression 

1 एक UnaryExpression या एक UnaryExpressionNotPlusMinus हो सकता है, लेकिन कोष्ठकों के बीच या तो PrimitiveType या ReferenceType गायब है। अगर हम हमेशा पहला नियम लागू करते हैं, तो हम PrimitiveType से IntegralType से टोकन byte तक पहुंच जाते हैं। सभी संभावित अगले टोकन को सूचीबद्ध करने के बजाय सिंटैक्स त्रुटि संदेश में केवल पहले अपेक्षित अगला टोकन शामिल है।

Integer b2 = (byte) 1; वाक्यविन्यास की दृष्टि से लेकिन शब्दार्थ की दृष्टि से सही नहीं है है। ग्रहण में, त्वरित सुधार (Ctrl+1) आपको बता सकता है कि कोड को कैसे बदला जाए ताकि यह शब्दार्थ की दृष्टि से भी सही हो जाए। आपके उदाहरण में, पहला त्वरित समाधान प्रस्ताव Change cast to 'Integer' है।

संक्षेप में, कंपाइलर कहता है कि क्या गलत है और क्विक फिक्स (Ctrl+1) इसे ठीक करने में मदद करता है।

0
howlger 13 मई 2018, 03:27