2011-09-01 18 views
5

Java/Android noob here (Yine) Yardımcı olabileceğinizi umuyordum.Mevcut Sınıfa Bir Convienience Yöntemi Ekleme (Class Cast İstisnası)

EPOCH'den bu yana geçen süreden ziyade geçen süreyi almak için küçük bir kolaylık yöntemi eklemeye çalışıyordum.

Yani bu yapmaya çalıştım:

public class EasyLocation extends android.location.Location { 

    ... 

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

benim Yeri sınıfa atmalarını aşağıda kodunda gibi kullanmaya çalıştı Ancak zaman. Sınıfında bir istisna var. Bunu okudum ve neden işe yaramadığını anlıyorum. Sorun bu değil.

Sorun şu ki: Bu bir tren şutu değil ama benim kodun geri kalanını biraz daha temiz hale getirmek için benim yöntemimin olması için iade edilene sahip olmak istiyorum. Etrafında bir yol bulamıyorum. Bunu nasıl yapacağın hakkında bir fikrin var mı?

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

sayesinde

Gerard.

cevap

4

Bunu böyle yapamazsınız. (A Location olmayan bir EasyLocation.)

ne aradığınız decorator pattern olduğuna inanıyoruz.

Genellikle böyle bir şey yapacağını:

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(); 
    } 
} 

Ve yerine

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

yapmanın size

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

do olsa unutmayın çoğu insan muhtemelen olur "Miras üzerinden kompozisyonu ekle" deyin ve wi'ye gidin th

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

Yani bunu kullanabilir miyim? lastNetworkLocation = yeni EasyLocation (locationManager.getLastKnownLocation (LocationManager.NETWORK_PROVIDER)); Bunu beğendiniz mi? – guided1

+0

tam olarak. (güncellenmiş yanıt) – aioobe

+0

Müthiş. Neredeyse oradaydım! Bunun için teşekkürler! :) – guided1

İlgili konular