2011-02-09 10 views
7

मान लीजिए MyClass जावा में परिभाषित कक्षा है, और इसमें कई स्थिर और गैर स्थैतिक सदस्य हैं। मैं जैसा कि नीचे दिखाया इस वर्ग (और संबद्ध साथी वस्तु) एक स्काला वस्तु MyObject में उपनाम करने की कोशिश की:टाइपिक्स के साथ एलियासिंग जावा क्लासेस टाइप करें

object MyObject { 
    import javastuff._ 
    type MyAlias = MyClass 
    val MyAlias = MyClass 
} 

Scalac शिकायत:

error: object MyClass is not a value 
val MyAlias = MyClass 

मैं इस के आसपास काम करते हैं? धन्यवाद।

+3

आप 'वैल मायअलीस' का उपयोग करने के लिए वास्तव में क्या प्रयास कर रहे हैं? प्रकार टाइपिंग कीवर्ड 'टाइप' कीवर्ड के साथ किया जाता है, जिसे आपने पहले ही कर लिया है। 'वैल मायअलीस 'एक मूल्य घोषणा है, माई क्लास एक प्रकार का नाम है और कोई मान नहीं है, इसलिए आप MyClass को' val MyAlias ​​'पर असाइन नहीं कर सकते हैं। कृपया हमें कुछ उपयोग के मामले दें। –

+3

@ वोंग, जावा क्लासिक तरीकों के आविष्कार JavaClass.staticMethod के साथ किया जाता है, जैसे कि जावा क्लास एक स्कैला 'ऑब्जेक्ट' था, @ सिद्धार्थ कक्षा के तरीकों के इस प्रतिनिधित्व को "उपनाम" करने का एक तरीका है जिस तरह से इसे हासिल किया जा सकता है स्कैला के 'ऑब्जेक्ट' के संबंध में स्कैला, उदाहरण के लिए 'वैल obj = scalaObject'। – pedrofurla

उत्तर

6

हालांकि यह कक्षा + साथी वस्तु के लिए शुद्ध स्कैला में काम करता है, यह जावा की स्थैतिक विधियों के साथ संभव नहीं है, क्योंकि ये किसी भी इंटरफ़ेस से संबंधित नहीं हैं।

स्कैला सिद्धांत में,, सिद्धांत में, किसी वर्ग के सभी स्थिर तरीकों के लिए प्रतिनिधि युक्त ऑब्जेक्ट बना सकता है, लेकिन यह वर्तमान में ऐसा नहीं करता है। यदि आप आरामदायक लेखन प्लगइन्स महसूस करते हैं तो इसके लिए एक कंपाइलर प्लगइन लिखना भी संभव है।

विफल होने पर, आपको या तो खुद को प्रतिनिधियों से भरा ऑब्जेक्ट बनाना होगा, या सिर्फ कुछ तरीकों को चुनना होगा और उन्हें कार्य के रूप में पास करना होगा।

+1

और इस प्रकार हम स्कैला में एक और कोने का मामला दर्ज करते हैं। <*sigh*> –

+1

यह एक कोने का मामला ठीक है, लेकिन यह स्कैला नहीं है। मैं अभी कुछ बार में JVM देख सकता हूं, पर सुरक्षा का उपयोग न करने और ऑब्जेक्ट उन्मुख नहीं होने वाली गतिविधियों में शामिल होने का आरोप लगाया गया है: "लेकिन वह (स्कैला) बस इसके लिए पूछ रही थी! उसने शायद कहा हो, लेकिन मुझे पता है कि उसका मतलब हाँ था। वह सिर्फ चिढ़ा रही है और पहली बार मेरी गोद में बैठने के लिए उसकी गलती है ... " –

0

जावा की स्थैतिक विधियों के साथ यह संभव नहीं है, क्योंकि ये किसी भी इंटरफ़ेस से संबंधित नहीं हैं।

अद्यतन 5 साल बाद: PR 5131 का उल्लेख है:

हम के रूप में एक नहीं एक को शरीर के साथ तरीकों जोड़ सकता है, जब एक वस्तु एक साथी के रूप में एक विशेषता थी स्थिर भाड़ा के की पीढ़ी को निष्क्रिय करने के लिए प्रयोग किया जाता जेवीएम 6 में इंटरफ़ेस 6.

जेवीएम ने इंटरफेस, में डिफ़ॉल्ट विधियों का समर्थन करने के लिए इस प्रतिबंध को उठाया ताकि हम स्थिर फॉरवर्डर्स पर भी प्रतिबंध उठा सकें।

सुधार scala-dev issue 59

commit 41c9a17Jason Zaugg (retronym) से देखें।

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