java – 为现有类添加一个Convienience方法(类强制转换异常)

前端之家收集整理的这篇文章主要介绍了java – 为现有类添加一个Convienience方法(类强制转换异常)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Java / Android noob here(仍然)我希望你能提供帮助.

我试图添加一个小的便利方法来获得已经过去的时间而不是自EPOCH以来的时间.

所以我试着这样做:

@H_403_9@public class EasyLocation extends android.location.Location { ... public long getElapsedTime() { return getTime() - System.currentTimeMillis(); } }

但是,当我尝试使用它时,如下面的代码将其转换为我的Location类.我有一个类强制转换异常.我已经阅读了它,我完全理解为什么它不起作用.那不是问题.

问题是:它不是一个火车粉碎,但我希望得到的东西有我的方法,以使我的代码的其余部分更清洁.我无法找到解决方法.有关如何做到这一点的任何想法?

@H_403_9@lastNetworkLocation = (EasyLocation) locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

谢谢,

杰拉德.

最佳答案
你不能这样做. (位置不是EasyLocation.)

我相信你要找的是decorator pattern.

你通常会做这样的事情:

@H_403_9@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(); } }

而不是做

@H_403_9@lastNetworkLocation = (EasyLocation) locationManager.getLastKnownLocation( LocationManager.NETWORK_PROVIDER);

你做

@H_403_9@lastNetworkLocation = new EasyLocation(locationManager.getLastKnownLocation( LocationManager.NETWORK_PROVIDER));

请记住,虽然大多数人可能会说“赞成组合而非继承”,然后继续使用

@H_403_9@public class EasyLocation { Location loc; public EasyLocation(Location loc) { this.loc = loc; } public long getElapsedTime() { return getTime() - System.currentTimeMillis(); } public Location getLocation() { return loc; } }

猜你在找的Android相关文章