2011-09-01 8 views
5

ここにJava/Androidのnoob(まだ)あなたが助けてくれることを望みました。既存のクラスにコンビエンスメソッドを追加する(クラスキャスト例外)

私は、EPOCHからの時間数ではなく経過した時間を取得するための小さな便利なメソッドを追加しようとしていました。

だから私はこれを実行しようとしました:

public class EasyLocation extends android.location.Location { 

    ... 

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

しかし、私は私の場所クラスにキャストし、その下のコードのようにそれを使用しようとしたとき。私はクラスキャスト例外があります。私はそれを読んで、それがうまくいかない理由を完全に理解しています。それは問題ではありません。

問題は:列車の破砕ではありませんが、私のコードの残りの部分を少しきれいにするために返されたものを私の方法で持っていたいと思います。私はそれを回避する方法を見つけることができません。どのようにそれを行う上の任意のアイデアですか?

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

おかげで、

ジェラルド。

答えて

4

あなたはそのようにすることはできません。 (LocationEasyLocationではありません。)

私は、あなたが探していることはdecorator patternであると考えています。

あなたは一般的にこのようなものだろう:あなたはほとんどの人はおそらくだろうとけれども心に留めておいてください

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

を行う

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

をやって「相続よりも組成を優先」と言い、wi 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

私はそれを使用しますか? lastNetworkLocation =新しいEasyLocation(locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)); このようにしますか? – guided1

+0

。 (更新された回答) – aioobe

+0

恐ろしい。私はほぼそこにいた!ありがとう! :) – guided1

関連する問題