2012-07-27 8 views
6

से साथी वर्ग की विधि तक नहीं पहुंच सकता मैंने सोचा कि मैं अपने साथी ऑब्जेक्ट से साथी वर्ग की हर विधि तक पहुंच सकता हूं। लेकिन मैं नहीं कर सकतासाथी ऑब्जेक्ट

class EFCriteriaType(tag:String) extends CriteriaType 
{ 
    // implemented method of CriteriaType 
    def getTag = this.tag 
} 

object EFCriteriaType 
{ 
    var TEXT: CriteriaType = new EFCriteriaType("text") 

    override def toString = getTag 
} 

संकलक त्रुटि: नहीं मिला: मूल्य getTag

मैंने क्या गलत कर रहा हूँ?

+0

मैं पूरी तरह से @ मैथ्यूफारवेल प्रतिक्रिया से सहमत हूं। इसके अलावा, मुझे लगता है कि आप चाहते हैं कि toString विधि क्लास ऑब्जेक्ट के बजाय वर्ग के अंदर हो। – jeslg

उत्तर

6

आप object EFCriteriaType में विधि getTag कॉल करने के लिए कोशिश कर रहे हैं। उस वस्तु में ऐसी कोई विधि नहीं है। आप कुछ ऐसा कर सकते हैं:

object EFCriteriaType extends EFCriteriaType("text") { 
    override def toString = getTag 
} 

इस प्रकार साथी को एक प्रकार का टेम्पलेट बनाते हैं।

आप उन सदस्यों तक पहुंच सकते हैं जो आमतौर पर एक साथी वस्तु से कक्षा में पहुंच योग्य नहीं होते हैं, लेकिन आपको अभी भी कक्षा तक पहुंचने के लिए कक्षा का उदाहरण होना चाहिए। उदा:

class Foo { 
    private def secret = "secret" 
    def visible = "visible" 
} 
object Foo { 
    def printSecret(f:Foo) = println(f.secret) // This compiles 
} 
object Bar { 
    def printSecret(f:Foo) = println(f.secret) // This does not compile 
} 

निजी विधि secretFoo के साथी वस्तु से सुलभ है। बार संकलित नहीं होगा क्योंकि गुप्त अप्राप्य है।

+1

ठीक है। मुझे लगता है मुझे समझ में आ गया। मुझे इसके तरीके को कॉल करने के लिए साथी वर्ग का एक उदाहरण चाहिए। अगर मैं _toString_ विधि को साथी वर्ग में ले जाता हूं, तो यह काम करता है। धन्यवाद! – GarfieldKlon

4

मैं काफी यकीन है कि आप यहाँ करने के लिए कोशिश कर रहे हैं क्या नहीं कर रहा हूँ, लेकिन आप वर्ग का एक उदाहरण पर getTag कॉल करने की आवश्यकता:

override def toString(x:EFCriteriaType) = x.getTag 
+0

मैं विधि _toString_ को ओवरराइड करना चाहता हूं और बस _tag_ वापस कर दूंगा। मैं ऑब्जेक्ट को टॉस्ट्रिंग में पास नहीं कर सकता, या यह ओवरलोडिंग बन जाएगा। – GarfieldKlon

1

बस विस्तार मैथ्यू जवाब देने के लिए है, जो सही एक है:

A companion object is a singleton but a class is not. a singleton. The companion object can access the methods of the class in the sense that a private member of the class C can be called in its companion object C.

किसी वर्ग के एक सदस्य कहते हैं के लिए, आपको उस वर्ग (का एक उदाहरण भले ही आप एक साथी से नहीं कर रहे हैं कि जरूरत ऑब्जेक्ट)