可定制的类

在用垃圾 java (请允许我这样亲切的称呼它),发现 java 的 util.Date 真是垃圾中的战斗机。在我自己的业务里编制了一个函数 fixDate,用来取时间部分。效果还可以,代码如下:

 private Date fixDate(Date d) {
  long i = d.getTime() % 86400000; // 86400 scnd
  if (i < 0) { // if the year is before 1970, getTime is always minus 0
   i += 86400000;
  }
  if (i >= 57600000)
   i -= 86400000; // java's 00:00 is 57600 scnd,and it belong to
  // 1970-1-2
  return new Date(i);
 }

这个函数如果属于 Date 类,应该叫 getTimePart 才对。考虑到我跟 java 有仇,叫 fixDate 相信也合情合理。另外,因为垃圾 java 把 Date 当作引用类型,如果可以的话最好补充一个 Date getClone() 方法,以免每次都需要手工转换。

现在考虑能不能把这些自己的函数放进 Date 类。

派生? 派生一个 MyDate,把这个强大的函数加进去。那么所有用到 Date 的地方,都要改成 MyDate。

高手可能要笑了。你的 MyDate 肯定是在你的项目里用,莫非 apache 也会用到那个 fixDate 函数? 是的,从这个例子来看,指责派生似乎没有充足的理由。而且,我们发现,apache 的源码里还真派生了不少基本类。

回忆 delphi,在 delphi 里有很多界面控件,我用过印象比较深的,FlatStyle,SkinEngine。这两套控件从文本框、按钮都有自己的实现,所以按理说 Windows 控件都需要重新写一遍,事实上他们还真是这么做的,SkinEngine 还写了 TDBxx 的实现。因为基类变了,又无法强制子类从新的基类派生,所以只好重写子类。

我设想的最终解决方法是让程序语言中的类可以接受增改,也就是说,派生类依旧叫基类的名字,在用户命名空间中覆写基类。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值