2012-09-14 19 views

उत्तर

23

final चरों में कोई मान हो सकता है, लेकिन एक बार असाइन किए जाने पर, अंतिम चर को किसी भी अन्य मूल्य पर पुन: असाइन नहीं किया जा सकता है।

उदाहरण के लिए:

main() { 
    final msg = 'hello'; 
    msg = 'not allowed'; // **ERROR**, program won't compile 
} 

final भी एक वस्तु में उदाहरण चर के लिए इस्तेमाल किया जा सकता। एक वर्ग का अंतिम क्षेत्र कन्स्ट्रक्टर निकाय चलाने से पहले सेट किया जाना चाहिए। एक अंतिम फ़ील्ड नहीं के लिए एक निहित सेटटर बनाया गया है, क्योंकि आप अंतिम चर पर एक नया मान सेट नहीं कर सकते हैं।

class Point { 
    final num x, y; 
    Point(this.x, this.y); 
} 

main() { 
    var p = new Point(1, 1); 
    print(p.x); // 1 
    p.x = 2; // WARNING, no such method 
} 

यह एहसास है कि final चर को प्रभावित करता है महत्वपूर्ण है, लेकिन नहीं वस्तु चर द्वारा की ओर इशारा किया। यही है, final परिवर्तनीय के ऑब्जेक्ट अपरिवर्तनीय नहीं बनाता है।

उदाहरण के लिए:

class Address { 
    String city; 
    String state; 
    Address(this.city, this.state); 
} 

main() { 
    final address = new Address("anytown", "hi"); 
    address.city = 'waikiki'; 
    print(address.city); // waikiki 
} 

उपरोक्त उदाहरण में, address चर अंतिम के रूप में चिह्नित किया गया है, तो यह हमेशा वस्तु new Address("anytown", "hi") निर्माता द्वारा instantiated को इंगित करेंगे। हालांकि, ऑब्जेक्ट में स्वयं ही राज्य है जो उत्परिवर्तनीय है, इसलिए यह शहर को बदलने के लिए पूरी तरह से मान्य है। final द्वारा रोका गया एकमात्र चीज address चर पुन: असाइन कर रही है।

+0

"एक वर्ग का अंतिम क्षेत्र कन्स्ट्रक्टर निकाय चलाने से पहले सेट किया जाना चाहिए।" - यह वह हिस्सा था जो मुझे सबसे ज्यादा फेंक रहा था। भले ही मैं कन्स्ट्रक्टर में अंतिम चर सेट कर रहा था, यह मेरे लिए भी नहीं हुआ था क्योंकि मुझे त्रुटि मिल रही थी। –

+0

@ केविन शहीन मुझे कन्स्ट्रक्टर के समक्ष अंतिम क्षेत्र स्थापित करके फेंक दिया गया था। कन्स्ट्रक्टर स्तर पर ऐसा करने की मांग करने वालों के लिए, यदि राज्य अंतिम चर था, तो इसे इस प्रकार सेट किया जा सकता है: पता (this.city): state = "Hawaii"; – djm

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