2010-01-29 19 views
6
में एक जावा इंटरफ़ेस को लागू करने

मैं है गूगल संग्रह का उपयोग करके संचय के निर्माण के लिए निम्नलिखित कोड:स्काला

val cache = new MapMaker().softValues().expiration(30, 
TimeUnit.DAYS).makeComputingMap(
    new com.google.common.base.Function[String,Int] { 
     def apply(key:String):Int ={ 
     1 
    } 
    }) 

और मैं निम्न त्रुटि संदेश मिल रहा है:

error: type mismatch; 
found : java.lang.Object with 
com.google.common.base.Function[java.lang.String,Int]{ ... } 
required: com.google.common.base.Function[?, ?] 
    new com.google.common.base.Function[String,Int] { 
^

मैं क्यों सोच रहा हूँ प्रकार मेल नहीं खाते?

वास्तविक कोड है:

import com.google.common.collect.MapMaker 
trait DataCache[V] { 
    private val cache = new MapMaker().softValues().makeComputingMap(
    new com.google.common.base.Function[String,V] { 
     def apply(key:String):V = null.asInstanceOf[V] 
    }) 
    def get(key:String):V = cache.get(key) 
} 

सधन्यवाद, अली

पुनश्च - मैं गूगल-संग्रह v1 उपयोग कर रहा हूँ

उत्तर

7

आपको अंतिम विधि कॉल में टाइप पैरामीटर की आपूर्ति करने की आवश्यकता है। आप कच्चे प्रकार के इंटरफेस के माध्यम से जा रहे हैं और स्कैला प्रकार की जानकारी का पुनर्निर्माण नहीं कर सकता है।

val cache = new MapMaker().softValues().expiration(30, 
TimeUnit.DAYS).makeComputingMap[String, Int](
    new com.google.common.base.Function[String,Int] { 
     def apply(key:String):Int ={ 
     1 
    } 
    }) 
1

निम्नलिखित काम करता है?

new com.google.common.base.Function[_,_] { 

यदि वह काम नहीं करता, तो आप घोषणा रखने के लिए के रूप में यह अभी है इच्छा हो सकती है, और उसके बाद इस तरह यह एक के बाद : com.google.common.base.Function[_, _] जोड़ने के लिए,:

val cache = new MapMaker().softValues().expiration(30, 
TimeUnit.DAYS).makeComputingMap(
    new com.google.common.base.Function[String,Int] { 
     def apply(key:String):Int ={ 
     1 
    } 
    }: com.google.common.base.Function[_, _]) 

मैं कुछ है कि सुना है Google सामान कच्चे प्रकार का उपयोग करते हैं, जो स्कैला के साथ अच्छी तरह से एकीकृत करने के लिए कठिन हैं। और, वास्तव में, नरक में वापस ले जाना चाहिए, जहां से वे आए थे, लेकिन यह सिर्फ imho है।

इसके अलावा, यदि आप -explaintypes के साथ संकलित कर सकते हैं, तो हम असफल होने की बेहतर धारणा प्राप्त कर सकते हैं।

+0

काम नहीं करता, अब मैं इस त्रुटि मिलती है: वर्ग प्रकार की आवश्यकता है, लेकिन com.google.common.base.Function [_, _] ने पाया नई com.google.common.base.Function [ _, _] मैंने भी कोशिश की - एक्सप्लेंटिप्स, वास्तव में आउटपुट को समझना वाकई मुश्किल है: java.lang. com.google.common.base.Object के साथ ऑब्जेक्ट करें [_, _]

+0

@Ali: ऐसा लगता है कि आपने केवल पहले सुझाव की कोशिश की थी। मैंने अब दूसरे सुझाव के लिए पूर्ण कोड चिपकाया। साथ ही, कृपया अपने प्रश्न में 'एक्सप्लेंटिप्स' का आउटपुट जोड़ें। –

+0

वास्तव में आउटपुट काफी बड़ा है, मैंने वास्तविक कोड जोड़ा है जो कोई त्रुटि संदेश को पुन: उत्पन्न करने के लिए बस पेस्ट कॉपी कर सकता है। अगर मुझे कुछ और प्रदान किया जाए तो कृपया मुझे बताएं। –