2012-02-27 12 views
12

the javadocs से:अमरूद की Cache.invalidate (ऑब्जेक्ट कुंजी) विधि सामान्य क्यों नहीं है?

void invalidate(K key); 

वहाँ एक तकनीकी कारण, एक ऐतिहासिक कारण या किसी अन्य कारण है:

public interface Cache<K,V> extends Function<K,V> { 
    //... 
    void invalidate(Object key); 
    //... 
} 

क्यों एक सामान्य विधि के रूप में प्रदान नहीं कर रहा है?

उत्तर

13

इसी कारण से Map.remove ऑब्जेक्ट तर्क लेता है, जिसे here और here समझाया गया है।

यह कारण न तो तकनीकी है और न ही ऐतिहासिक: यह सिर्फ ... एक निष्पक्ष समझदार कारण है।

+0

लेकिन कैश को 'ऑब्जेक्ट कुंजी' विधि क्यों नहीं है? :) –

+5

क्योंकि 'Cache.get' और' LoadingCache.getUnchecked' प्रत्येक कारण प्रविष्टियों को कैश में _added_ होने का कारण बन सकता है, इसलिए इसे उसी कारण से 'के' टाइप करना होगा' Map.put' को लेना होगा प्रकार 'कुंजी' की कुंजी। माना जाता है कि, 'getIfPresent'' ऑब्जेक्ट 'नहीं लेता है - यह इसके तर्क को' के' प्रकार 'के रूप में मजबूर करता है - और यह शायद एक निर्णय कॉल था। (लेकिन 'asMap()। Get' अभी भी 'ऑब्जेक्ट' लेता है, और यह कार्यात्मक रूप से' getIfPresent' के समतुल्य है।) –

+0

हाँ यह अजीब लगता है कि वे कुछ स्थानों में 'मानचित्र' इंटरफ़ेस के अनुरूप हैं और अन्य नहीं। –

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