क्या कोई मौजूदा लाइब्रेरी है जो मुझे जावा विधि को @Const के रूप में एनोटेट करने की अनुमति देती है, ताकि संकलक (एपीटी I presume का उपयोग करके) एक फ़ील्ड को अपडेट करता है या किसी फ़ील्ड पर गैर-कॉन्स विधि को आमंत्रित करता है ; और @Const के रूप में पैरामीटर को एनोटेट करें, ताकि स्वीकार करने की विधि किसी भी गैर[email protected] कॉन्स्ट विधियों का आह्वान नहीं कर सकती है, या अपने किसी भी फ़ील्ड को अपडेट नहीं कर सकती है?एनोटेशन का उपयोग कर जावा में कॉन्स्ट सहीता?
(मूल रूप से, एनोटेशन का उपयोग करने के लिए जावा स्थिरांक-शुद्धता जोड़ने की कोशिश कर, कुछ स्पष्ट इस तरह के आदि एक @ कॉन्स्ट टाइप पैरामीटर से/बताए, जैसा कि ऊपर सवाल में नहीं शामिल किया गया विवरण, देखते हैं)
मुझे यह मिला है: http://confluence.atlassian.com/pages/viewpage.action?pageId=182158080 लेकिन ऐसा लगता है कि यह केवल आईडीईए के हिस्से के रूप में उपलब्ध है।
class Person {
private String name;
private String address;
@Const public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
... etc. for address
}
अब, अगर मैं इस तरह के रूप में एक विधि को परिभाषित:
void processPerson(@Const Person p)
एक लाइन जैसे:
नीचे स्पष्टीकरण के लिए एक अनुरोध के बाद, यहां दिखाने के लिए मैं क्या मतलब नमूना कोड p.getName()
processPerson
में ठीक होगा, क्योंकि getName
को @Const विधि के रूप में चिह्नित किया गया था। लेकिन processPerson
के भीतर p.setName()
पर कॉल करना एक त्रुटि के रूप में फ़्लैग किया जाएगा।
ध्यान दें कि यह final
से बहुत अलग है: यदि पैरामीटर final Person p
के रूप में परिभाषित किया गया था, p
के लिए किसी भी काम के अवैध होता है, लेकिन यह अभी भी पूरी तरह से संशोधित करने के लिए क्या p
को संदर्भित करता है मान्य है (या तो p.setName(...)
या इससे भी अधिक सीधे का उपयोग कर, p.name = ...
साथ।
क्या आपने इस उद्देश्य के लिए 'अंतिम' कीवर्ड का उपयोग करने का प्रयास किया था? इसके साथ गलत क्या है? – AlexR
एक अंतिम विधि एक विधि है जिसे ओवरराइड नहीं किया जा सकता है। यह अलग है। – aioobe
मेरा मतलब अंतिम विधि नहीं है। मेरा मतलब अंतिम तर्क है। मुझे पता है कि अंतिम विधि क्या है :) – AlexR