2011-09-01 23 views
5

Java/Android noob ở đây (Vẫn) Tôi hy vọng bạn có thể trợ giúp.Thêm phương thức đảm bảo cho lớp hiện tại (Loại trừ diễn viên lớp học)

Tôi đã cố gắng thêm một phương pháp tiện lợi nhỏ để có được số lượng thời gian đã trôi qua thay vì số lượng thời gian từ EPOCH.

Vì vậy, tôi đã cố gắng để làm điều này:

public class EasyLocation extends android.location.Location { 

    ... 

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

Tuy nhiên khi tôi cố gắng sử dụng nó như thế nào trong đoạn code dưới đây mà phôi nó đến lớp Location tôi. Tôi có một ngoại lệ lớp học. Tôi đã đọc nó và tôi hoàn toàn hiểu tại sao nó không hoạt động. Đó không phải là vấn đề.

Vấn đề là: nó không phải là một chuyến tàu đập vỡ nhưng tôi muốn có những gì được trả lại để có phương pháp của tôi trên đó để làm cho phần còn lại của mã của tôi một chút sạch hơn. Tôi không thể tìm ra cách nào xung quanh nó. Bất kỳ ý tưởng về cách làm điều đó?

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

Cảm ơn,

Gerard.

Trả lời

4

Bạn không thể làm như vậy. (A Locationkhông phải là an EasyLocation.)

Tôi tin rằng những gì bạn đang tìm kiếm là decorator pattern.

Bạn thường sẽ làm một cái gì đó như thế này:

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

Và thay vì làm

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

bạn làm

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

Hãy nhớ dù rằng hầu hết mọi người sẽ có thể nói "Ủng hộ thành phần trên thừa kế" và truy cập 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

Vì vậy, tôi sẽ sử dụng điều đó? lastNetworkLocation = new EasyLocation (locationManager.getLastKnownLocation (LocationManager.NETWORK_PROVIDER)); Như thế này? – guided1

+0

chính xác. (câu trả lời được cập nhật) – aioobe

+0

Tuyệt vời. Tôi đã gần đến rồi! Cảm ơn vì điều đó! :) – guided1

Các vấn đề liên quan