Java / Android noob here(仍然)我希望你能提供帮助。
我试图添加一个小便捷方法来获取已经过去的时间,而不是自EPOCH以来的时间。
所以我试着这样做:
public class EasyLocation extends android.location.Location {
...
public long getElapsedTime() {
return getTime() - System.currentTimeMillis();
}
}
然而,当我尝试使用它时,如下面的代码将其转换为我的Location类。我有一个类强制转换异常。我已经阅读了它,我完全理解为什么它不起作用。这不是问题。
问题是:这不是火车粉碎,但我希望得到的是我的方法,以使我的其余代码更清洁。我无法找到解决方法。有关如何做到这一点的任何想法?
lastNetworkLocation = (EasyLocation) locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
谢谢,
杰拉德。
答案 0 :(得分: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;
}
}