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

标签 java android oop casting

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

相关文章:

java - JPA Criteria API - 设置连接并从连接实体中获取数据

android - 如何在运行时创建新的 XML 资源 ID?

php - 学习 PHP 面向对象的方面

java - 将 Java 类重写为干净且可测试的代码

java - java中如何将 double 分成整数?

java - 无法连接到 MS Access 数据库

java - moto 设备和三星 s6 首次无法打开相机

类之间的 Python 传递变量

Java 8 添加对象列表的多个属性的值

java - LinearLayout 中屏幕末尾的 TextView