为现有类添加一个便捷方法(类强制转换异常)

时间:2011-09-01 12:59:30

标签: java android oop casting

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

谢谢,

杰拉德。

1 个答案:

答案 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;
    }
}