这里是 Java/Android 新手(仍然)我希望你能提供帮助。
我试图添加一个小的便捷方法来获取已经过去的时间数,而不是自 EPOCH 以来的时间数。
所以我尝试这样做:
public class EasyLocation extends android.location.Location {
...
public long getElapsedTime() {
return getTime() - System.currentTimeMillis();
}
}
但是,当我尝试像下面的代码一样使用它时,它会将它转换为我的 Location 类。我得到了一个类(class) Actor 异常(exception)。我已经阅读了它并且我完全理解为什么它不起作用。这不是问题。
问题是:这不是火车撞车,但我希望返回的内容包含我的方法,以使我的其余代码更清晰一些。我想不出解决办法。关于如何做到这一点的任何想法?
lastNetworkLocation = (EasyLocation) locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
谢谢,
杰拉德。
最佳答案
你不能那样做。 (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;
}
}
关于java - 向现有类添加便捷方法(类转换异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7270653/