2011-07-15 15 views
8

मेरे जावा वर्ग के रूप में यहाँमैं स्कैला से जावा एनम्स कैसे एक्सेस करूं?

public class Test { 

    protected enum TestEnum {A, B, C}; 

    public Test(TestEnum te) { 

    } 

} 

इस प्रकार मेरी स्काला है

class ScalaEnum(myEnum: TestEnum) extends Test(myEnum) { 

} 

मैं निम्न त्रुटि संदेश वस्तु टेस्ट में

वर्ग TestEnum वस्तु टेस्ट Access में पहुँचा नहीं जा सकता संरक्षित करने के लिए प्राप्त क्लास टेस्टएनम की अनुमति नहीं है क्योंकि पैकेज में क्लास क्लास ScalaEnum संलग्न है XXX पैकेज में ऑब्जेक्ट टेस्ट का सबक्लास नहीं है YYY जहां लक्ष्य परिभाषित किया गया है

उत्तर

2

जैसा कि @ एलेक्स और @ जीन-फिलिप ने कहा है, इस तथ्य के साथ ऐसा करने के लिए बहुत कुछ नहीं है कि आप इस तथ्य के साथ एक enum और अधिक तक पहुंचने की कोशिश कर रहे हैं कि आंतरिक श्रेणी के enums स्पष्ट रूप से स्थिर हैं: this answer देखें , उदाहरण के लिए।

इसका मतलब है कि आप this limitation के खिलाफ चल रहे हैं। Scala 2.9.1 के साथ मेरे लिए समस्या के आसपास सार्वजनिक कार्यों के लिए TestEnum बदलना।

यह सब कहकर, मार्टिन की सीमा को हटाने के लिए आपत्तियों के बावजूद, आपका कोड स्कैला 2.10 के साथ अपेक्षित काम करता है।

0

ऐसा लगता है जैसे enum क्लास निश्चित रूप से स्थैतिक है, क्योंकि स्कैला इसे "ऑब्जेक्ट टेस्ट" कहते हैं। इसे कन्स्ट्रक्टर में योग्यता प्राप्त करने का प्रयास करें (उदा। Test.TestEnum), और यदि यह काम नहीं करता है, तो पैकेज एक्सेस तक दृश्यता को आराम दे सकता है।

+2

बिल्कुल। [संरक्षित स्थैतिक आंतरिक कक्षाओं के साथ अंतःक्रियाशीलता सीमित है] (http://www.scala-lang.org/node/1381)। –

+0

अगर मैं सार्वजनिक – deltanovember

+0

पर बदल जाता हूं तो मुझे अभी भी त्रुटि मिलती है, अगर आप नाम अर्हता प्राप्त करते हैं तो क्या होगा? :) –

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