क्या किसी को पता है कि ग्रहण में सामग्री सहायता में this कीवर्ड (जावा) को static final के रूप में क्यों चिह्नित किया गया है? final मुझे समझ में आता है, लेकिन क्यों static?

Screenshot Eclipse

स्क्रीनशॉट एक्लिप्स 2020-03 के साथ बनाया गया था, लेकिन मैं कई सालों से इस व्यवहार को देख रहा हूं।

18
user7291698 5 मई 2020, 21:43
1
बहुत ही रोचक प्रश्न। :) +1
 – 
Anish B.
12 मई 2020, 08:02

2 जवाब

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

ऐसा करने वाला कोड org.eclipse.jdt.internal.ui.text.java.ParameterGuesser में है

// add 'this'
if (currentType != null && !(fEnclosingElement instanceof IMethod && Flags.isStatic(((IMethod) fEnclosingElement).getFlags()))) {
  String fullyQualifiedName= currentType.getFullyQualifiedName('.');
  if (fullyQualifiedName.equals(expectedType)) {
    ImageDescriptor desc= new JavaElementImageDescriptor(JavaPluginImages.DESC_FIELD_PUBLIC, JavaElementImageDescriptor.FINAL | JavaElementImageDescriptor.STATIC, JavaElementImageProvider.SMALL_SIZE);
    res.add(new Variable(fullyQualifiedName, "this", Variable.LITERALS, false, res.size(), new char[] {'.'}, desc));  //$NON-NLS-1$
  }
}

उस कोड में मुख्य बात है

JavaElementImageDescriptor.FINAL | JavaElementImageDescriptor.STATIC

JavaElementImageDescriptor के झंडे के रूप में जो स्थिर और अंतिम ओवरले छवियों के प्रदर्शन को हार्ड कोडिंग कर रहा है। तो ये हमेशा this के लिए प्रदर्शित होते हैं।

इसे क्यों चुना गया, यह कोड कोई कारण नहीं बताता है।

14
greg-449 10 मई 2020, 12:14
बहुत बहुत धन्यवाद, दिलचस्प! मुझे आश्चर्य है कि उन्होंने यह तरीका क्यों चुना। क्या आप this को स्थिर मानने का कोई तार्किक कारण देखते हैं?
 – 
user7291698
11 मई 2020, 20:09
3
नहीं, मैं कोई कारण नहीं सोच सकता। यह मुझे समझ में नहीं आता है और मुझे जावा भाषा विशिष्टता में कुछ भी दिखाई नहीं देता है। आप इसे एक्लिप्स बगज़िला में एक बग के रूप में रिपोर्ट करने का प्रयास कर सकते हैं (bugs.eclipse.org/bugs)
 – 
greg-449
11 मई 2020, 20:26
@ greg-449 अच्छा जवाब। मुझे यह नहीं पता था। +1
 – 
Anish B.
12 मई 2020, 08:03

दो कारण। 1) this को फिर से असाइन नहीं किया जा सकता है और 2) आप एक कंस्ट्रक्टर के अंदर हैं और एक सामान्य विधि नहीं है।

0
nitind 6 मई 2020, 00:30
IMHO आपका पहला बिंदु final का कारण है, static के लिए नहीं। और आपके दूसरे बिंदु से संबंधित: असल में मैं प्रारंभकर्ता के अंदर हूं, कन्स्ट्रक्टर के अंदर नहीं। लेकिन यह वैसे भी प्रासंगिक नहीं है, क्योंकि सामग्री सहायता प्रारंभकर्ताओं, रचनाकारों और सामान्य तरीकों में समान व्यवहार दिखाती है।
 – 
user7291698
6 मई 2020, 09:17