2011-09-01 14 views
5

जावा/एंड्रॉइड नोब (अभी भी) मुझे उम्मीद है कि आप मदद कर सकते हैं के लिए एक अविश्वसनीय विधि जोड़ना।मौजूदा कक्षा (क्लास कास्ट अपवाद)

मैं EPOCH के बाद से समय की संख्या के बजाय पारित समय की संख्या प्राप्त करने के लिए एक छोटी सुविधा विधि जोड़ने की कोशिश कर रहा था।

तो मैं ऐसा करने की कोशिश की:

public class EasyLocation extends android.location.Location { 

    ... 

    public long getElapsedTime() { 
     return getTime() - System.currentTimeMillis(); 
    } 
} 

हालांकि जब मैं कोड है, जो नीचे यह मेरे स्थान वर्ग के लिए डाले में की तरह इसका इस्तेमाल करने की कोशिश की। मुझे कक्षा का अपवाद मिला। मैंने इसे पढ़ लिया है और मैं पूरी तरह से समझता हूं कि यह क्यों काम नहीं करता है। यह मुद्दा नहीं है।

मुद्दा यह है कि: यह एक ट्रेन तोड़ नहीं है, लेकिन मैं अपने कोड को थोड़ा क्लीनर बनाने के लिए अपनी विधि रखने के लिए क्या लौटा दूंगा। मैं इसके चारों ओर एक रास्ता नहीं समझ सकता। ऐसा करने के बारे में कोई विचार क्या है?

lastNetworkLocation = (EasyLocation) locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

धन्यवाद,

जेरार्ड।

उत्तर

4

आप ऐसा नहीं कर सकते हैं। (ए Location नहीं है एक EasyLocation।)

मेरा मानना ​​है कि क्या आप देख रहे हैं decorator pattern है।

आप आमतौर पर कुछ इस तरह करना होगा:

public class EasyLocation extends android.location.Location { 

    public EasyLocation(Location loc) { 
     // copy data from loc to this. 
     super(loc); 
    } 
    ... 

    public long getElapsedTime() { 
     return getTime() - System.currentTimeMillis(); 
    } 
} 

और बजाय

lastNetworkLocation = 
    (EasyLocation) locationManager.getLastKnownLocation(
               LocationManager.NETWORK_PROVIDER); 

करने का आप

lastNetworkLocation = 
    new EasyLocation(locationManager.getLastKnownLocation(
               LocationManager.NETWORK_PROVIDER)); 

करना हालांकि ध्यान रखें कि अधिकांश लोगों को शायद होगा "विरासत पर रचना का पक्ष लें", और वाई जाओ वें

public class EasyLocation { 

    Location loc; 

    public EasyLocation(Location loc) { 
     this.loc = loc; 
    } 

    public long getElapsedTime() { 
     return getTime() - System.currentTimeMillis(); 
    } 

    public Location getLocation() { 
     return loc; 
    } 
} 
+0

तो क्या मैं इसका उपयोग करूंगा? अंतिम नेटवर्कवर्क = नया EasyLocation (locationManager.getLastKnownLocation (LocationManager.NETWORK_PROVIDER)); इस तरह? – guided1

+0

बिल्कुल। (अद्यतन उत्तर) – aioobe

+0

बहुत बढ़िया। मैं लगभग वहाँ था! उसके लिए धन्यवाद! :) – guided1

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