gpt4 book ai didi

java - 向现有类添加便捷方法(类转换异常)

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:49:27 27 4
gpt4 key购买 nike

这里是 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com